|
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 { |
|
8 interface ToNumber { Number get(); } |
|
9 interface ToToNumber { ToNumber get(); } |
|
10 interface Factory<T> { T get(); } |
|
11 |
|
12 void m1(Factory<Factory<Object>> f) {} |
|
13 void m1(ToToNumber f) {} |
|
14 |
|
15 void m2(Factory<Factory<Number>> f) {} |
|
16 void m2(ToToNumber f) {} |
|
17 |
|
18 void m3(Factory<Factory<Integer>> f) {} |
|
19 void m3(ToToNumber f) {} |
|
20 |
|
21 |
|
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 |
|
32 Integer getInteger() { return 23; } |
|
33 } |