Embrouillé par l'opérateur "wildcard"
Bonjour,
J'ai toujours compris par : List<?extends B> list que list acceptera des elements de type héritant de B. (On descends dans l'arbre des classes)
Et List<? super B> list que list acceptera des elements de type dont B hérite (On remonte dans l'arbre des classes).
Alors pourquoi ce qui suit ne compile pas??
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
class A{}
class B extends A{}
class C extends B{}
public class Test {
public static void main(String[] args) {
List<? extends B> list = new ArrayList<B>();
list.add(new B());
list.add(new C());
List<? super B> list1 = new ArrayList<A>();
list.add(new B());
list.add(new A());
}
} |
D'autre part à quoi ca sert de définir <? extends B> puisque le polymorphisme permet deja cela.
A l'aide