interface I { public V put(K k, V v); } interface A{} interface B extends A{} interface SameArgsI { T same(T a, T b); } class InferenceFromArgs { private static void bar(A a, I i) { } void foo(B b) { bar(b, (k, v) -> {int i = k; int j = v; return Math.max(i, j);}); } public static SameArgsI max() { return (a, b) -> b; } }