2009-07-07 4 views

Antwort

33

Damit die allgemeinen typisierte Methoden verwendet werden können -

Class<Foo> klass = Foo.class; 
Foo f = klass.newInstance(); 
Foo f = klass.cast(Object); 
+0

Warnung an alle, die glauben, dass diese Antwort korrekt ist, weil sie akzeptiert wurde: Dies kann nicht korrekt sein, da der Code nicht kompiliert wird. 'klass' ist nicht initialisiert bevor es benutzt wird. –

+5

... (Folge): Beachten Sie, dass Code, der kompiliert - nämlich "Klasse klass = Foo.class;" - die ursprüngliche Frage stellt, weil "Foo.class" scheinbar die notwendigen Informationen bereits liefert. Die Möglichkeit, typisierte generische Methoden zu verwenden, ist jedoch die richtige Antwort. es ist einfach nicht klar aus dem gegebenen Beispiel hier. –

14

Es gibt eine kurze Erwähnung dieses im Generics Abschnitt der Version 1.5 des Sprachführers:

Noch überraschender, Klassenklasse wurde generisch. Klassenliterale fungieren jetzt als Typtoken, die Informationen sowohl zur Laufzeit als auch zur Kompilierzeit bereitstellen. Dies ermöglicht eine Art von statischen Fabriken durch die getAnnotation Methode beispielhaft in der neuen AnnotatedElement Schnittstelle:

<T extends Annotation> T getAnnotation(Class<T> annotationType); 

Dies ist eine generische Methode. Es folgert den Wert seines Typparameter T von seinem Argument und gibt eine entsprechende Instanz von T, wie sie in der folgenden Ausschnitt dargestellt:

Author a = Othello.class.getAnnotation(Author.class); 

Vor Generika, würden Sie die gehabt haben zu werfen Ergebnis für den Autor. Auch würden Sie keine Möglichkeit gehabt haben, den Compiler zu prüfen, ob der tatsächliche Parameter repräsentiert eine Unterklasse von Annotation

7

Der wahre Grund ist gegeben durch Neil Gafter zu machen:

Wenn wir hinzugefügt Generika Java in JDK5, Ich änderte die Klasse java.lang.Class zu einem generischen Typ. Zum Beispiel ist der Typ String.class jetzt < String>. Gilad Bracha prägte dafür die Bezeichnung Token. Meine Absicht war es, einen bestimmten API-Stil zu aktivieren, den Joshua Bloch das THC- oder TypeSafe Heterogene Container-Muster nennt.

Verwandte Themen