Tijdens het lezen van de officiële Java-tutorial over generieke geneesmiddelen, ontdekte ik dat je het type-argument (in dit geval is T
) kunt beperken om een klasse en/of meer interfaces uit te breiden met de ‘en’-operator (&
) als volgt:
<T extends MyClass & Serializable>
Ik heb de &
vervangen door ,
(per ongeluk en werkt nog steeds, met een kleine waarschuwing).
Mijn vraag is, is er een verschil tussen deze twee:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
En de voorbeeldmethode:
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;
}
Antwoord 1, autoriteit 100%
<T extends MyClass & Serializable>
Dit stelt dat de enkele type parameter T
MyClass
moet uitbreiden en Serializable
moet zijn.
<T extends MyClass , Serializable>
Ditdeclareert tweetype parameters, één genaamd T
(die MyClass
moet uitbreiden) en één genaamd Serializable
(die java.io.Serializable
verbergt — dit is waarschijnlijk waar de waarschuwing over ging).