[ ]
[])[][]{
int[] foo(int[] a[])[][]{ return null; }
int[][][] foo(int[][] a){ return null; }
...
void foo(String... strings){} void foo(String s, String... strings){}
void foo(String... strings){} void foo(String s, String... strings){} void bar() { foo(""); }
<T>
interface F1 {} interface F2 {} class A<T extends F1 & F2> { void method(F1 f1) { } void method(T t){ } }
interface F1 {} interface F2 {} class A<T extends F2 & F1> { void method(F1 f1) { } void method(T t){ } }
JLS: The erasure of a type variable is the erasure of its leftmost bound.
interface F1 {} interface F2 {} class B implements F1, F2{} class A<T extends F2 & F1> { void method(F1 f1) { } void method(T t){ } void test{ method(new B());//??? } }
interface F1 {} interface F2 {} class B implements F1, F2{} class A<T extends F2 & F1> { void method(F1 f1) { } void method(T t){ } } class C implements F2, F1 { void test(){ new A<B>().method(new B()); //??? } }
By Nicolas PERU