1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/tools/javac/lambda/MostSpecific14.java Wed May 14 15:41:28 2014 -0600 1.3 @@ -0,0 +1,33 @@ 1.4 +/* 1.5 + * @test /nodynamiccopyright/ 1.6 + * @bug 8034223 1.7 + * @summary Most-specific testing for nested functional interface types 1.8 + * @compile/fail/ref=MostSpecific14.out -XDrawDiagnostics MostSpecific14.java 1.9 + */ 1.10 +class MostSpecific14 { 1.11 + interface ToNumber { Number get(); } 1.12 + interface ToToNumber { ToNumber get(); } 1.13 + interface Factory<T> { T get(); } 1.14 + 1.15 + void m1(Factory<Factory<Object>> f) {} 1.16 + void m1(ToToNumber f) {} 1.17 + 1.18 + void m2(Factory<Factory<Number>> f) {} 1.19 + void m2(ToToNumber f) {} 1.20 + 1.21 + void m3(Factory<Factory<Integer>> f) {} 1.22 + void m3(ToToNumber f) {} 1.23 + 1.24 + 1.25 + void test() { 1.26 + m1(() -> () -> 23); // ok: choose ToToNumber 1.27 + m2(() -> () -> 23); // error: ambiguous 1.28 + m3(() -> () -> 23); // ok: choose Factory<Factory<Integer>> 1.29 + 1.30 + m1(() -> this::getInteger); // ok: choose ToToNumber 1.31 + m2(() -> this::getInteger); // error: ambiguous 1.32 + m3(() -> this::getInteger); // ok: choose Factory<Factory<Integer>> 1.33 + } 1.34 + 1.35 + Integer getInteger() { return 23; } 1.36 +} 1.37 \ No newline at end of file