Heim > Java > javaLernprogramm > Warum kann ich einer Java-Sammlung keine Werte mit einem generischen Wildcard-Typ wie „ hinzufügen? erweitert Parent`?

Warum kann ich einer Java-Sammlung keine Werte mit einem generischen Wildcard-Typ wie „ hinzufügen? erweitert Parent`?

Patricia Arquette
Freigeben: 2024-12-03 13:51:10
Original
696 Leute haben es durchsucht

Why Can't I Add Values to a Java Collection with a Wildcard Generic Type like `? extends Parent`?

Probleme beim Hinzufügen von Werten zu Java-Sammlungen mit generischen Wildcard-Typen

Betrachten Sie den folgenden Code, bei dem Parent eine Schnittstelle ist:

List<? extends Parent> list = ...;
Parent p = factory.get();   // returns concrete implementation
list.set(0, p);   // fails here: set(int, ? extends Parent) cannot be applied to (int, Parent)
Nach dem Login kopieren

Warum schlägt dieser Code fehl?

Das Problem liegt in der Verwendung des Generischer Wildcard-Typ? erweitert Parent. Diese Syntax gibt an, dass die Liste Objekte jedes Typs enthalten kann, der Parent erweitert. Dies bietet zwar Flexibilität, erhöht aber auch ein gewisses Maß an Unsicherheit hinsichtlich der tatsächlichen Art der Objekte in der Liste.

Um zu verstehen, warum der Code fehlschlägt, betrachten Sie das folgende Szenario:

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); // No! It's not a child! Type safety is broken...
Nach dem Login kopieren

Die Platzhaltertyp ? erweitert Parent ermöglicht es uns, die childList der parentList zuzuweisen. Wenn wir jedoch versuchen, ein Objekt vom Typ Parent in der ParentList festzulegen, kann der Compiler nicht garantieren, dass das entsprechende Objekt in der ChildList auch vom Typ Child ist. Dies könnte zu einem Laufzeitfehler oder unerwartetem Verhalten führen.

Um die Typsicherheit aufrechtzuerhalten, schränkt der Compiler die Vorgänge ein, die für eine Sammlung mit einem generischen Platzhaltertyp ausgeführt werden können. In diesem Fall ist die Zuweisung eines Objekts zur Liste verboten, da der Compiler die Kompatibilität des Objekts mit dem unbekannten Typ der Liste nicht garantieren kann.

Das obige ist der detaillierte Inhalt vonWarum kann ich einer Java-Sammlung keine Werte mit einem generischen Wildcard-Typ wie „ hinzufügen? erweitert Parent`?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage