Beim Lesen des offiziellen Java-Tutorials zu Generika habe ich festgestellt, dass Sie das Typargument (in diesem Fall T
) einschränken können , um eine Klasse und / oder mehrere Schnittstellen mit dem Operator 'und' ( &
) wie folgt zu erweitern :
<T extends MyClass & Serializable>
Ich ersetzte die &
mit ,
(durch Fehler und funktioniert immer noch, mit einer kleinen Warnung).
Meine Frage ist, gibt es einen Unterschied zwischen diesen beiden:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
Und die Beispielmethode:
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;
}
Antworten:
Dies bestätigt, dass der einzelne Typparameter
T
erweitert werden mussMyClass
und sein mussSerializable
.Dies deklariert zwei Typparameter, einen aufgerufenen
T
(der erweitert werden mussMyClass
) und einen aufgerufenenSerializable
(der sich verstecktjava.io.Serializable
- darum ging es wahrscheinlich in der Warnung).quelle