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

Warum sind Java-Generika nicht kovariant?

Linda Hamilton
Linda HamiltonOriginal
2024-11-21 04:19:10856Durchsuche

Why Aren't Java Generics Covariant?

Kovarianz von Java-Generika

In Java sind Generika nicht kovariant, wie im bereitgestellten Artikel erläutert. Das heißt, wenn eine Klasse eine generische Klasse erweitert, kann der generische Typ der untergeordneten Klasse kein Untertyp des generischen Typs der übergeordneten Klasse sein.

Das „Alias“-Konzept verstehen

Der Autor erwähnt, dass „wenn ln mit li aliasiert würde“, dies das Versprechen der Typsicherheit brechen würde. Ein Alias ​​bezieht sich auf einen alternativen Namen oder eine Referenz auf ein Objekt. In diesem Szenario ist li ein Alias ​​von ln.

Ein anschauliches Beispiel

Betrachten Sie den folgenden Code:

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

Obwohl Integer von erbt Nummer, das Hinzufügen eines Float-Objekts zu ln ist illegal. Dies liegt daran, dass wir durch Aliasing von li zu ln im Wesentlichen sagen, dass li Zahlen enthalten kann. Allerdings wurde li ursprünglich nur für die Speicherung von Ganzzahlen deklariert. Daher verstößt das Hinzufügen eines Floats zu ln gegen die Typsicherheitsgarantie von li.

Schlussfolgerung

Dieses Beispiel zeigt, dass Generika in Java nicht kovariant sind. Der Versuch, den generischen Typ einer Unterklasse dem generischen Typ einer Oberklasse zuzuweisen, führt zu einem Fehler bei der Kompilierung.

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