2013-02-13 6 views
7

Ich schreibe eine Methode, die ich gerne eine Klasse an eine Methode übergeben würde, wo ein Teil des Codes überprüft, ob das Objekt von einem bestimmten Typ ist. Dies ist, was ich will (aber was offensichtlich nicht funktioniert):Übergabe einer Klasse als Argument an eine Methode in Java

Gibt es irgendwelche Hinweise, wie dies getan werden kann? Vielen Dank!

Antwort

19

Class hat sowohl eine isInstance()-Methode und eine isAssignableFrom()-Methode zur Überprüfung solcher Sachen. Die am nächsten, was Sie suchen ist:

if (myClass.isInstance(obj)) { 

Update: Von Ihrem Kommentar, möchten Sie den Namen einer Klasse in eine Methode zu übergeben und überprüfen, ob etwas zu dieser Klasse zugeordnet werden kann. Die einzige Möglichkeit besteht darin, den Klassennamen als String zu übergeben, dann die Klasse zu laden und eine der oben genannten Methoden zu verwenden. Zum Beispiel (die Ausnahmebehandlung weggelassen):

private void methodName(String className) { 
    Class myClass = Class.forName(className); 
    Object obj; 
    /* Complicated code to find obj in datastructure */ 
    if (myClass.isInstance(obj)) { 
        /* Do stuff */ 
    } 
} 
+0

Ich glaube nicht, dass ich meine Frage klar genug formuliert - das Problem ist, dass ich möchte in der Lage sein Instanceof zu verwenden, dh I Ich möchte, dass die "Klasse", die ich überlasse, der Name einer Klasse ist. – tor

+1

Aktualisiert. Ist das näher an dem, wonach Sie suchen? –

2

Ich glaube, Sie Objektklassentyp zur Laufzeit wissen wollen .. so reflaction api dafür. und für Ihr Problem dieser Lösung, die ich denke, Arbeit

public class Clazz { 
public static void main(String[] args) { 
    Clazz clazz = new Clazz(); 
    ArrayList list = new ArrayList<>(); 
    Class myClass = list.getClass(); 
    clazz.display(myClass); 
} 

/** 
* Modified By nirav.modi on Feb 13, 2013 
*/ 
private void display(Class myClass) { 
    ArrayList list = new ArrayList<>(); 
    if(myClass.isInstance(list)) { 
     System.out.println("Yooo , its instance.."); 
    }else { 
     System.out.println("Not instance"); 
    } 
} 

}

0
MyClass1 myClass1 = new MyClass1(); 
if(MyClass1.class.isInstance(myClass1)) 
    System.out.println("(MyClass1.class.isInstance(myClass1) is TRUE"); 
else 
    System.out.println("(MyClass1.class.isInstance(myClass1) is FALSE"); 

Object myClass2 = new MyClass2(); 
Class class1 = myClass1.getClass(); 
Class class2 = myClass2.getClass(); 
System.out.println("class1 == class2 : " + (class1 == class2)); 
System.out.println("class1.isAssignableFrom(class2) = " 
    + class1.isAssignableFrom(class2)); 

MyClass1 myClass3 = new MyClass1(); 
Class class3 = myClass3.getClass(); 
System.out.println("class1 == class3 : " + (class1 == class3)); 
System.out.println("class1.isAssignableFrom(class3) = " 
    + class1.isAssignableFrom(class3)); 

OUPUT: 

(MyClass1.class.isInstance(myClass1) is TRUE 
class1 == class2 : false 
class1.isAssignableFrom(class2) = false 
class1 == class3 : true 
class1.isAssignableFrom(class3) = true 
+1

Nice One Sunil ... –