En lisant le tutoriel officiel Java sur les génériques, j'ai trouvé que vous pouvez restreindre l'argument de type (dans ce cas T
) pour étendre une classe et / ou plusieurs interfaces avec l'opérateur 'et' ( &
) comme ceci:
<T extends MyClass & Serializable>
J'ai remplacé le &
par ,
(par erreur et fonctionne toujours, avec un avertissement mineur).
Ma question est la suivante: y a-t-il une différence entre ces deux:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
Et l'exemple de méthode:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
Réponses:
Cela affirme que le paramètre de type unique
T
doit s'étendreMyClass
et doit l'êtreSerializable
.Cela déclare deux paramètres de type, l'un appelé
T
(qui doit s'étendreMyClass
) et l'autre appeléSerializable
(qui cachejava.io.Serializable
- c'est probablement le sujet de l'avertissement).la source