Heim >Java >javaLernprogramm >Können mehrere Platzhalter in generischen Methoden auf unterschiedliche Typen verweisen?

Können mehrere Platzhalter in generischen Methoden auf unterschiedliche Typen verweisen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-06 14:18:15713Durchsuche

Can Multiple Wildcards in Generic Methods Refer to Different Types?

Mehrere Platzhalter für generische Methoden

Frage: Können sich verschiedene Platzhalter in generischen Methoden auf völlig unterschiedliche Typen beziehen? Wie funktioniert ein verschachtelter Platzhalter? benehmen?

Antwort:

Verschachtelte Platzhalter sind die Quelle der Verwirrung, nicht mehrere Platzhalter.

  • Verschachtelte Platzhalter: Eine Liste> ist KEINE eine Liste> weil Java-Generika invariant sind, was bedeutet, dass ein List ist keine Liste. Ebenso kann ein List> ist keine Liste>.
  • Platzhalter in generischen Methoden:

    • Mehrere nicht verwandte Platzhalter in generischen Methoden sind zulässig , z. B. List list1, List list2.
    • Die Methode addAll(list2) auf list1 ist jedoch zulässig, da der von ? erfasste generische Typ ? in beiden Listen können unterschiedlich sein.
    • Wenn die Platzhalter explizite Obergrenzen haben (z. B. ? erweitert die Liste>), gelten zusätzliche Einschränkungen.

Ausschnitt Erläuterungen:

  • LOLUnknowns1: WahrscheinlichIllegal fügt eine Liste hinzu list zu einer List> Lol. Dies wird kompiliert, weil ? in Liste kann auf jeden Typ verweisen, während List> kann Listen jeglicher Art enthalten.
  • LOLUnknowns1a: Wann dasselbe? wird sowohl für List Typen schlägt die Kompilierung fehl, da die Capture-Konvertierungsregeln für verschachtelte Platzhalter die Verwendung eines einzelnen ? für beide Listen.
  • LOLUnknowns1b: Wenn ein Argument explizit null ist, ist die Kompilierung erfolgreich, da null auf jeden generischen Typ anwendbar ist und nicht an der Erfassungskonvertierung beteiligt ist.
  • DoubleLOL: Hinzufügen von zwei List> Instanzen ist zulässig, da die Erfassungskonvertierung nicht rekursiv erfolgt, was bedeutet, dass das ? kann auf verschiedene Typen in jeder Liste verweisen.
  • IntoTheWild: Erstellen einer Liste> für eine Liste> ist nicht zulässig, da die Capture-Konvertierung nicht rekursiv angewendet wird.
  • IntoTheWild2: Die Capture-Konvertierung kann nicht auf den inneren Listentyp angewendet werden, daher List> ist keine List>.

Zusammenfassend lässt sich sagen, dass mehrere Platzhalter in generischen Methoden Flexibilität bei der Handhabung unbekannter Typen ermöglichen, während verschachtelte Platzhalter spezifische Einschränkungen in Bezug auf die Erfassungskonvertierung haben.

Das obige ist der detaillierte Inhalt vonKönnen mehrere Platzhalter in generischen Methoden auf unterschiedliche Typen verweisen?. 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