Wat is het verschil tussen ‘&’ en ‘,’ in Java-generieke geneesmiddelen?

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 TMyClassmoet uitbreiden en Serializablemoet zijn.

<T extends MyClass , Serializable>

Ditdeclareert tweetype parameters, één genaamd T(die MyClassmoet uitbreiden) en één genaamd Serializable(die java.io.Serializableverbergt — dit is waarschijnlijk waar de waarschuwing over ging).

Other episodes