1 /* 2 * @test /nodynamiccopyright/ 3 * @bug 8034223 4 * @summary Most-specific testing for nested functional interface types 5 * @compile/fail/ref=MostSpecific14.out -XDrawDiagnostics MostSpecific14.java 6 */ 7 class MostSpecific14 { get()8 interface ToNumber { Number get(); } get()9 interface ToToNumber { ToNumber get(); } get()10 interface Factory<T> { T get(); } 11 m1(Factory<Factory<Object>> f)12 void m1(Factory<Factory<Object>> f) {} m1(ToToNumber f)13 void m1(ToToNumber f) {} 14 m2(Factory<Factory<Number>> f)15 void m2(Factory<Factory<Number>> f) {} m2(ToToNumber f)16 void m2(ToToNumber f) {} 17 m3(Factory<Factory<Integer>> f)18 void m3(Factory<Factory<Integer>> f) {} m3(ToToNumber f)19 void m3(ToToNumber f) {} 20 21 test()22 void test() { 23 m1(() -> () -> 23); // ok: choose ToToNumber 24 m2(() -> () -> 23); // error: ambiguous 25 m3(() -> () -> 23); // ok: choose Factory<Factory<Integer>> 26 27 m1(() -> this::getInteger); // ok: choose ToToNumber 28 m2(() -> this::getInteger); // error: ambiguous 29 m3(() -> this::getInteger); // ok: choose Factory<Factory<Integer>> 30 } 31 getInteger()32 Integer getInteger() { return 23; } 33 }