Generics : comportement anormal ?
Salut,
Quelqu'un pourrait-il m'expliquer pourquoi m2 ne compile pas alors que m3 compile...?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class TestGenerics {
static class X {}
static class A<T>{}
public void m1(List<A<? extends X>> list) {}
public void m2(A<? extends X> a) {
m1(Collections.singletonList(a));
}
public void m3(A<? extends X> a) {
m1(create(a));
}
private List<A<? extends X>> create(A<? extends X> a) {
List<A<? extends X>> list = new ArrayList<A<? extends X>>();
list.add(a);
return list;
}
} |
(que ça soit avec eclipse ou avec javac)
Message d'erreur avec javac:
Code:
1 2 3 4
| TestGenerics.java:16: m1(java.util.List<TestGenerics.A<? extends TestGenerics.X>>) in TestGenerics cannot be applied to (java.util.List<TestGenerics.A<capture#10 of ? extends TestGenerics.X>>)
m1(Collections.singletonList(a));
^
1 error |