Heim >Java >javaLernprogramm >Warum kann ich einer Liste keine Daten hinzufügen?
Daten zur Liste hinzufügen erweitert Nummer>
Das Dilemma beim Versuch, Elemente zu einer Liste hinzuzufügen erweitert Nummer> ergibt sich aus der Einschränkung der Wildcard-Deklaration. In einer solchen Deklaration kann die Variable jeden Wert aus einer Typfamilie enthalten. Dies impliziert, dass die folgenden Zuweisungen gültig sind:
List<? extends Number> foo3 = new ArrayList<Number>(); List<? extends Number> foo3 = new ArrayList<Integer>(); List<? extends Number> foo3 = new ArrayList<Double>();
Diese Wildcard-Deklaration verbietet jedoch das direkte Hinzufügen von Elementen zur Liste, da der spezifische Listentyp unbekannt ist. Beispielsweise ist das Hinzufügen einer Ganzzahl zu foo3 nicht zulässig, da es sich möglicherweise um eine ArrayList Im Gegensatz dazu ist die Wildcard-Deklaration List Supernummer> ermöglicht das Hinzufügen von Number oder seinen Oberklassen. Umgekehrt beschränkt es den Abruf auf den Typ Number oder seine Unterklassen. Dieses Verhalten entsteht dadurch, dass sichergestellt wird, dass der Liste hinzugefügte Elemente ihre Integrität nicht verletzen. Um die praktischen Auswirkungen zu veranschaulichen, zeigen die folgenden Aufrufe von Collections.copy(), wie Platzhalter Flexibilität beim Kopieren von Daten zwischen Listen verwandter Elemente ermöglichen Typen: Zusammenfassend lässt sich sagen, dass das Hinzufügen von Daten zu List erweitert Nummer> ist aufgrund der Unsicherheit über den Typ der zugrunde liegenden Liste nicht möglich, während das Lesen aus List Supernummer> ist auf den Typ Number und seine Unterklassen beschränkt. Platzhalter bieten Vielseitigkeit beim Kopieren von Daten zwischen Listen verwandter Typen, wie beispielsweise Collections.copy(). Das obige ist der detaillierte Inhalt vonWarum kann ich einer Liste keine Daten hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!Collections.copy(new ArrayList<Number>(), new ArrayList<Number>());
Collections.copy(new ArrayList<Number>(), new ArrayList<Integer>());
Collections.copy(new ArrayList<Object>(), new ArrayList<Number>());
Collections.copy(new ArrayList<Object>(), new ArrayList<Double>());