Heim  >  Artikel  >  Java  >  Warum sind Java-Generika nicht kovariant?

Warum sind Java-Generika nicht kovariant?

Susan Sarandon
Susan SarandonOriginal
2024-11-20 14:16:181003Durchsuche

Why Are Java Generics Not Covariant?

Java-Generika und Kovarianz: Die Einschränkungen verstehen

Kovarianz in Generika bezieht sich auf die Fähigkeit eines Subtyps, seinen Supertyp zu ersetzen, ohne ihn zu verletzen Typensicherheit. In Java sind Generika jedoch nicht kovariant, was bedeutet, dass Subtypen nicht Supertypvariablen zugewiesen werden können.

Um dieses Konzept zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:

List<Integer> li = new ArrayList<Integer>();
List<Number> ln = li; // illegal
ln.add(new Float(3.1415));

Hier ist ln Alias ​​mit li, was bedeutet, dass ln auf dieselbe Liste wie li verweist. Allerdings wird ln als List deklariert, was darauf hinweist, dass es jeden Typ enthalten kann, der Number erweitert. Dies schließt Float ein, das keine Ganzzahl ist.

Wenn Kovarianz zulässig wäre, wäre der obige Code zulässig, würde jedoch die Typsicherheit verletzen. Durch Zuweisen eines List (d. h. li) zu einer Liste (d. h. ln) könnten wir der Liste möglicherweise nicht ganzzahlige Werte hinzufügen, was ihre Integrität als Liste von Ganzzahlen gefährden würde.

Um die Typsicherheit aufrechtzuerhalten, sind Java-Generika daher nicht kovariant. Diese Einschränkung stellt sicher, dass Untertypen in generischen Kontexten nicht austauschbar mit Supertypen verwendet werden können, wodurch potenzielle Typfehler vermieden werden.

Das obige ist der detaillierte Inhalt vonWarum sind Java-Generika nicht kovariant?. 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