/* * @test /nodynamiccopyright/ * @bug 8034223 * @summary Most-specific testing with inference variables in function parameter types * @compile/fail/ref=MostSpecific12.out -XDrawDiagnostics MostSpecific12.java */ class MostSpecific12 { interface I<T> { void take(T arg1, String arg2); } interface J<T> { void take(String arg1, T arg2); } interface K { void take(String arg1, String arg2); } <T> void m1(I<T> arg) {} void m1(K arg) {} <T> void m2(J<T> arg) {} <T> void m2(K arg) {} <T> void m3(I<T> arg) {} <T> void m3(J<T> arg) {} void test() { m1((String s1, String s2) -> {}); // ok m2((String s1, String s2) -> {}); // ok m3((String s1, String s2) -> {}); // error m1(this::referencedMethod); // ok m2(this::referencedMethod); // ok m3(this::referencedMethod); // error m1(String::compareTo); // ok m2(String::compareTo); // ok m3(String::compareTo); // error } void referencedMethod(String s1, String s2) {} }