Heim >Java >javaLernprogramm >Wie funktioniert das Schlüsselwort „super' von Java Generics mit begrenzten Platzhaltern und welche Einschränkungen hat es?

Wie funktioniert das Schlüsselwort „super' von Java Generics mit begrenzten Platzhaltern und welche Einschränkungen hat es?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-25 06:45:22988Durchsuche

How Does Java Generics' `super` Keyword Work with Bounded Wildcards, and What Are Its Limitations?

Super-Schlüsselwort von Java Generics: Verwendung und Einschränkungen verstehen

Generika erweitern die Leistungsfähigkeit von Java-Sammlungen, indem sie die Anpassung von Datentypen ermöglichen Einbußen bei der Typensicherheit. Das Schlüsselwort super spielt in diesen generischen Sammlungen eine entscheidende Rolle.

Begrenzte Platzhalter verstehen

Bei der Deklaration einer generischen Sammlung kann das Schlüsselwort super mit begrenzten Platzhaltern verwendet werden. Mit diesem Platzhaltertyp kann eine Sammlung einen bestimmten Typ oder seine Supertypen enthalten. Zum Beispiel:

List<? super Number> list = null;

Diese Deklaration bedeutet, dass die Liste Number-Objekte oder jede ihrer Superklassen, wie z. B. Object, enthalten kann.

Elemente zu begrenzten Wildcard-Sammlungen hinzufügen

Es ist wichtig zu beachten, dass das Hinzufügen von Elementen zu begrenzten Platzhaltersammlungen strengen Typsicherheitsregeln unterliegt. Im obigen Beispiel:

  • list.add(new Integer(0)) ist gültig, weil Integer Number erweitert.
  • list.add(new Object()) ist ungültig, weil Object ist kein Subtyp von Number.

Testen der Grenzen von Super Platzhalter

Entgegen den Erwartungen lässt sich der folgende Code nicht kompilieren:

static void test(List<? super Number> param) {
  param.add(new Integer(2));
}

public static void main(String[] args) {
  List<String> sList = new ArrayList<String>();
  test(sList); // Compile error
}

Während String ein Untertyp von Object und Object ein Supertyp von Number ist, schlägt dieser Code immer noch fehl kompilieren. Der Grund dafür ist, dass der Platzhalter den spezifischen Typ Number (wie in List definiert) und seine Supertypen erfasst, was String ausschließt.

Warum erlaubt Java Aber nicht

Der Grund, warum Java keine Platzhalter mit niedrigerer Grenze zulässt (z. B. ), liegt im Typsystem von Java. Platzhalter mit niedrigeren Grenzen würden die Erstellung von Sammlungen ermöglichen, die jeden Supertyp eines bestimmten Typs enthalten könnten, was möglicherweise zu unsicherer Umwandlung und Typverletzungen führen könnte.

Zusammenfassend lässt sich sagen, dass das Schlüsselwort super in Java-Generika die Erstellung von Generic ermöglicht Sammlungen, die Objekte eines bestimmten Typs oder seiner Supertypen enthalten können. Es ist wichtig, die Typsicherheitseinschränkungen im Zusammenhang mit begrenzten Platzhaltern zu verstehen, um die Gültigkeit und Korrektheit Ihres Java-Codes sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie funktioniert das Schlüsselwort „super' von Java Generics mit begrenzten Platzhaltern und welche Einschränkungen hat es?. 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