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 : Sélectionner tout - Visualiser dans une fenêtre à part
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