2013-02-13 15 views
7

Sto scrivendo un metodo in cui vorrei passare una classe a un metodo, in cui una parte del codice include il controllo se l'oggetto è di un certo tipo. Questo è quello che voglio (ma che ovviamente non funziona):Passare una classe come argomento a un metodo in java

private static class MyClass1 { /***/ } 
private static class MyClass2 { /***/ } 

private void someFunc() { 
    /* some code */ 
    methodName(MyClass1); 
    methodName(MyClass2); 
} 


private void methodName(Class myClass) { 
    Object obj; 
    /* Complicated code to find obj in datastructure */ 
    if (obj instanceof myClass) { 
     /* Do stuff */ 
    } 
} 

Qualche suggerimento su come questo può essere fatto? Grazie!

risposta

19

Class ha sia un metodo isInstance() sia un metodo isAssignableFrom() per il controllo di cose del genere. Il più vicino a quello che stai cercando è:

if (myClass.isInstance(obj)) { 

Update: Dal tuo commento, si vuole passare il nome di una classe in un metodo e verificare se qualcosa è assegnabile a tale classe. L'unico modo per farlo è passare il nome della classe come una stringa, quindi caricare la classe e utilizzare uno dei metodi sopra menzionati. Per esempio (la gestione delle eccezioni omesso):

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

Non credo ho formulato la mia domanda abbastanza chiaro - il guaio è che voglio essere in grado di utilizzare instanceof, cioè io voglio che la "Classe" che sto passando sia il nome di una Classe. – tor

+1

aggiornato. È più vicino a quello che stai cercando? –

2

Penso che si desidera sapere tipo di classe dell'oggetto in fase di esecuzione .. in modo da utilizzare reflaction api per questo. e per il vostro problema di questa soluzione penso lavoro

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 ... –

Problemi correlati