2009-07-07 6 views
4

bearbeiten Da es viele und downvotes Leute, die nicht verstehen, was ich um, ich werde anders formulieren:Ist die T-Klasse in generischer Klasse <T> einer anderen Klasse zuweisbar?

Wie ich zur Laufzeit finde heraus, was die Klasse ist, dass foo aus wurde generified ?

public boolean doesClassImplementList(Class<?> genericClass) 
{ 
    // help me fill this in 
    // this method should return true if genericClass implements List 
    // I can't do this because it doesn't compile: 
    return genericClass instanceof List; 
} 
+0

-1 für ein Beispiel veröffentlichen, die nicht kompiliert. Und eine, die in zwei Zeilen Code beantwortet werden könnte. – kdgregory

+0

Es könnte beantwortet werden, wenn ich die Antwort wusste, aber ich nicht und ich sah in der Dokumentation der Klasse und konnte es nicht finden. – ripper234

+0

Es würde beantwortet werden, wenn Sie Beispiele, die kompiliert haben, geschrieben haben. Beginne mit foo = Integer.class und geh von dort. – kdgregory

Antwort

9

Class.isAssignableFrom

+0

Ich verstehe es jetzt, es ist wirklich eine dumme Frage. Ich denke, was mich verwirrt ist Java-Konzept von Generika. Ich bin immer noch nicht daran gewöhnt (im Gegensatz zu .Nets '). – ripper234

0

Sie können nicht in Java (type erasure)

+0

Sagen Sie was ??????? (SO benötigt mindestens 15 Zeichen für einen Kommentar). – ripper234

0

Sie sollten Class.forName ("fully_qualified_name") werden unter Verwendung eines Klasse-Objekt zu erzeugen, oder mit dem .getClass() -Methode auf einem bereits instanzierte Objekt. Außerdem ist die Klasse für int-Typen in der Integer.TYPE-Eigenschaft definiert.

Ich brauche ein wenig mehr Klärung von dem, was Sie versuchen zu tun, übereinstimmen den gleichen Typ? Sie können eine Reihe von Methoden verwenden, was ist das Endziel?

Ok, jetzt, dass Sie geklärt haben ... here etwas Hilfe ... passiert nur in einer Klasse ..

public boolean doesClassImplementList(Class genericClass) 
{ 
    // help me fill this in 
    // this method should return true if genericClass implements List 
    // I can't do this because it doesn't compile: 

    //this will give you a a list of class this class implements 
    Class[] classesImplementing = genericClass.getInterfaces(); 

    //loop through this array and test for: 
    for(int i=0; i<classesImplementing.length; i++) { 
    if (classesImplementing[i].getName().equals("java.util.List")) { 
    return true; 
    } 
    } 
    return false; 
} 
+0

Der Fragesteller verwendet Integer.class tatsächlich in der "Frage". –

+0

Ihre Antwort funktioniert auch viel besser als meine :) –

+0

Schöne Schleife. Warum hast du nicht: List.class.isAssignableFrom (genericClass); stattdessen? Tom - Ich sehe keinen Verweis auf Integer.class in der Frage. – JeeBee

0

Class<Integer> ist eine Typdeklaration, können Sie es zu einer Variablen nicht zuweisen , wie du es in deiner ersten Zeile machst.

Class<Integer> ist im Grunde eine Möglichkeit, den Integer-Typ zu referenzieren, so dass Sie ihn als Parameter übergeben können. Es wirkt sich auf einige Methoden aus (z. B. Cast), bietet jedoch im Wesentlichen die Möglichkeit, einer Methode einen generischen Parameter zuzuweisen und diesen einem Typ zuzuordnen.

Zum Beispiel:

public <T> T someMethod(Object someObject, Class<T> castTo) { 
    return castTo.cast(someObject); 
} 
Verwandte Themen