Heim >Java >javaLernprogramm >Warum kann ich einer Java-Sammlung keine Werte mit einem generischen Platzhaltertyp (Liste) hinzufügen?

Warum kann ich einer Java-Sammlung keine Werte mit einem generischen Platzhaltertyp (Liste) hinzufügen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 19:34:14276Durchsuche

Why Can't I Add Values to a Java Collection with a Wildcard Generic Type (List

Java-Sammlung mit generischem Wildcard-Typ: Wert hinzufügen

Beim Versuch, einer Java-Sammlung, die mit einem generischen Wildcard-Typ deklariert wurde, einen Wert hinzuzufügen, wie List, kann der Compiler einen Fehler auslösen. Dies tritt auf, wenn der Typ des hinzugefügten Werts (z. B. Parent p) nicht mit dem erwarteten Typ der Sammlung übereinstimmt.

Diese Einschränkung besteht aus Sicherheitsgründen. Betrachten Sie das folgende Beispiel:

List<Child> childList = new ArrayList<Child>();
childList.add(new Child());

List<? extends Parent> parentList = childList;
parentList.set(0, new Parent());

Child child = childList.get(0); // Unexpected type!

Hier definieren wir eine Liste von untergeordneten Objekten und erstellen daraus dann eine generische Wildcard-Liste parentList. Wir können ein Element sicher aus parentList abrufen und in Parent konvertieren. Der Versuch, der Liste ein übergeordnetes Objekt zuzuweisen, ist jedoch nicht zulässig, da es möglicherweise nicht mit dem tatsächlichen Typ der Elemente der Liste kompatibel ist.

Diese Einschränkung verhindert potenzielle Laufzeittypfehler und stellt sicher, dass die Integrität des Die Sammlung bleibt erhalten. Es ermöglicht die Verwendung von Platzhaltertypen zum Lesen aus unbekannten Sammlungen und verhindert gleichzeitig Änderungen, die das beabsichtigte Verhalten der Sammlung beeinträchtigen könnten.

Das obige ist der detaillierte Inhalt vonWarum kann ich einer Java-Sammlung keine Werte mit einem generischen Platzhaltertyp (Liste) hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn