Das Oracle-Dokument über Wildcards in Generics lautet:
Der Platzhalter kann in verschiedenen Situationen verwendet werden: als Typ von a Parameter , Feld oder lokale Variable ; manchmal als return type (Obwohl es eine bessere Programmierpraxis ist, genauer zu sein).
Ich habe alle vier in der folgenden Klasse ausprobiert und habe Compiler-Fehler auf jedem einzelnen bekommen. Warum? Was mache ich falsch?
%Vor%Das Tutorial ist schrecklich formuliert. Sie können keinen Platzhalter für eines der aufgeführten Dinge verwenden. Sie können einen generischen Typ mit einem Platzhalter dafür verwenden .
%Vor% Das ?
-Zeichen ist der Platzhaltertyp Argument .
Der Artikel beginnt mit
Im generischen Code wird das Fragezeichen (?), der Platzhalter, repräsentiert einen unbekannten Typ.
Der einzige Ort, wo Sie diese Syntax verwenden können, ist als Teil des generischen Codes, dh. ein generisches Argument. Der nächste Satz bezieht sich auf generischen Code, der den Platzhalter verwendet. Also zum Beispiel
als Typ eines Parameters
Sie könnten
haben %Vor%Oder für
%Vor%als lokale Variable
Aber
Der Platzhalter wird niemals als Typargument für eine generische Methode verwendet Aufruf, eine generische Klasseninstanzerstellung oder ein Supertyp.
Sie können es nicht als
verwenden %Vor%Platzhalter kann mit & lt; & gt; Operator in einem Generika-Konzept eingeführt in Java 5, zur Darstellung eines unbekannten Typs . Generics wird verwendet, um eine Klasse mit einem Member im verallgemeinerten Format zu definieren. Wenn Sie beim Erstellen des Objekts angeben möchten, dass der Benutzer den Typ des Elements angibt, können Sie das Konzept der Generika verwenden. Es kann nur für das Instanzmitglied verwendet werden, das nicht mit dem statischen Element verwendet werden kann, da Speicher für statische nur einmal zugewiesen wird.
Wildcard-Konzept in Generics eingeführt, um unbekannte Art zu beschränken, sagen wir, ich habe eine Liste, die Wildcard hat und dieses Platzhalter Nummer Wrapperklasse erweitern. Das bedeutet, dass list mit Integer, Long, Short, Byte arbeiten kann, weil sie die Number-Wrapper-Klasse erweitern, aber nicht mit String, da die String-Klasse die Number-Wrapper-Klasse nicht erweitert.
%Vor%Komm zu dir Programm, du hast eine falsche Syntax benutzt, da ich Wildcard erwähnt habe, kann mit & lt; & gt; Betreiber.
%Vor%Wir können keinen Platzhalter verwenden, während die Klasse wie oben erwähnt -
instanziiert wird
, aber wir können Generika verwenden, um das Feld als unbekannten Typ wie I, N, S in der Mitarbeiterklasse bereitzustellen. Dieser Typ wird beim Erstellen des Klassenobjekts angegeben -
%Vor%%Vor%Platzhalter als Methodenparameter -
%Vor%Lokale Variable als Platzhalter deklarieren -
%Vor%Wir können Wildcard und Generics als Rückgabetyp der Methode verwenden. Hier ist das Beispiel von Generics als Rückgabetyp der Methode -
Hier ist das Beispiel von Wildcard als Rückgabetyp der Methode -
%Vor% Wildcards haben keine individuelle Existenz. Sie werden immer als Typparameter für generische Klassen verwendet. Beispiel: List<? extends Number>
. Ich gebe ein Beispiel für alle Szenarien.
Tags und Links java generics bounded-wildcard wildcard unbounded-wildcard