Heim > Java > javaLernprogramm > Kovarianz-, Kontravarianz-, Erweiterungs- und Superselektionsmethoden von Java-Generika

Kovarianz-, Kontravarianz-, Erweiterungs- und Superselektionsmethoden von Java-Generika

PHPz
Freigeben: 2023-05-26 13:46:12
nach vorne
1341 Leute haben es durchsucht

Um Kovarianz und Kontravarianz zu verstehen, müssen wir zunächst Folgendes einführen:

Wenn C eine Unterklasse von P ist, kann P gemäß dem Liskov-Substitutionsprinzip C ersetzen, das heißt P p = new C();
C erbt von P, aufgezeichnet als C < Beispielsweise ist Integer eine Unterklasse von Number gemäß dem Liskov-Substitutionsprinzip.

2eba2a66606ba649471b8c2e304ad819

Wird der folgende Code einen Fehler melden?
  • ? extensions Number stimmt nicht mit dem Typ von Integer überein

    rrreee

    Zuallererst wird beim Aufruf der Add-Methode automatisch das generische E verwendet <? erweitert Nummer>Die zweite Zeile meldet einen Fehler, was bedeutet, dass <code>? erweitert Nummer nicht die übergeordnete Klasse von Integer ist. Hier müssen wir unterscheiden, dass List<? erweitert Number> die übergeordnete Klasse von ArrayList<Integer> ist. 🎜🎜? extensions Number kann als ein bestimmter Typ in einem Typbereich betrachtet werden, der eine bestimmte Unterklasse von Number darstellt, aber es ist nicht klar, um welche Unterklasse es sich handelt. Es kann sich um Float oder Short handeln , oder es ist eine Unterklasse von Integer (Integer wird durch final geändert und kann keine Unterklassen haben. Dies ist nur eine hypothetische Situation. Es bestimmt nur seine Obergrenze als Zahl und nicht die Untergrenze (es kann ? erweitert Number < Integer, also ist ? erweitert Number nicht die übergeordnete Klasse von Integer Ändern Sie den obigen Code und er wird korrekt sein. Fehler: 🎜🎜rrreee🎜Zuallererst ist List<? super Number> die übergeordnete Klasse von <code>ArrayList<Object> code>, und die erste Zeile ist korrekt. 🎜🎜Die zweite Zeile: <code>? super Number ist die übergeordnete Klasse von Integer. Der Grund ist: ? super Number stellt eine bestimmte übergeordnete Klasse dar Zahl. Es kann Serializable oder Object sein, aber egal um welche es sich handelt, die übergeordnete Klasse von Number muss die übergeordnete Klasse von Integer sein, daher ist auch die zweite Zeile korrekt . Soll ich „Extens“ oder „Super“ verwenden? 🎜🎜🎜Die Kopiermethode von java.util.Collections (JDK1.7) gibt uns die Antwort: 🎜🎜rrreee🎜🎜🎜Wenn Sie Daten von einer generischen Klasse erhalten möchten, verwenden Sie „Extens“; 🎜🎜🎜🎜Um Daten in eine generische Klasse zu schreiben, verwenden Sie „super“;

  • Das obige ist der detaillierte Inhalt vonKovarianz-, Kontravarianz-, Erweiterungs- und Superselektionsmethoden von Java-Generika. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    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
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage