| class MyTest { |
| |
| static class Foo<T> { |
| T m() { |
| return null; |
| } |
| } |
| |
| interface I { |
| Integer m(Foo<Integer> f); |
| } |
| |
| public static void main(String[] args) { |
| I i = Foo::m; |
| } |
| } |
| |
| class MyTest1 { |
| |
| interface I1 { |
| void m(String s); |
| } |
| |
| interface I2 { |
| void m(Integer i); |
| } |
| |
| interface I3 { |
| void m(Object o); |
| } |
| |
| static class Foo<T extends Number> { |
| Foo(T t) {} |
| } |
| |
| |
| static void foo(I1 i) {} |
| static void foo(I2 i) {} |
| static void foo(I3 i) {} |
| |
| static { |
| foo<error descr="Ambiguous method call: both 'MyTest1.foo(I1)' and 'MyTest1.foo(I2)' match">(Foo::new)</error>; |
| } |
| } |