Je constate que le code suivant ne passe pas :Résumé :
On ne peut pas passer une Collection<List<Collection<String>>> à une méthode qui prend comme paramètre une Collection<Collection<Collection<String>>>.
Pourquoi?
il génère l'erreur de compilation suivant sur l'appel de print(c) :
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class Test { public Test() { Collection<List<Collection<String>>> c = new ArrayList<List<Collection<String>>>(); List<Collection<String>> c1 = new ArrayList<Collection<String>>(); Collection<String> c2 = new ArrayList<String>(); c2.add("test1"); c2.add("test2"); c1.add(c2); c2 = new ArrayList<String>(); c2.add("test3"); c1.add(c2); c.add(c1); c1 = new ArrayList<Collection<String>>(); c2 = new ArrayList<String>(); c2.add("test4"); c1.add(c2); c.add(c1); print(c); } private void print(Collection<Collection<Collection<String>>> c) { System.out.println("Résultat :"); for(Collection<Collection<String>> c1 : c) { for (Collection<String> c2 : c1) { for (String s : c2) { System.out.println(s); } } } } }
La question est pourquoi ? Une List est pourtant une Collection. Mais le compilateur ne semble pas apprécier l'utilisation d'une interface enfant dans le cas d'une généricité imbriquée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 /home/[*******]/devel/java/TestApplication/src/testapplication/Test.java:38: print(java.util.Collection<java.util.Collection<java.util.Collection<java.lang.String>>>) in testapplication.Test cannot be applied to (java.util.Collection<java.util.List<java.util.Collection<java.lang.String>>>)
Partager