interface I { void m(int i); } interface J { void mm(int i, int j); } interface K { void k(String m); } class Foo { void foo(I i){} void foo(J j){} void foo(K k){} void bar() { foo((p) -> { System.out.println(p); }); foo((p, k) -> { System.out.println(p); }); foo((String s) ->{ System.out.println(s); }); foo((String p, String k) -> { System.out.println(p); }); } } class WithTypeParams { interface I { void m(T t); } interface J { void n(K k, V v); } class Foo { void foo(I i){} void foo(J j){} void bar() { foo((p) -> { System.out.println(p); }); foo((p, k) -> { System.out.println(p); }); foo((String s) ->{ System.out.println(s); }); foo((String p, String k) -> { System.out.println(p); }); foo((int k) -> {System.out.println(k);}); } } }