web-dev-qa-db-fra.com

Passer une classe en tant qu'argument à une méthode en Java

J'écris une méthode où je voudrais passer une classe à une méthode, où une partie du code inclut la vérification si l'objet est d'un certain type. C'est ce que je veux (mais qui évidemment ne fonctionne pas):

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 */
    }
}

Des indices sur la façon dont cela peut être fait? Merci!

10
tor

Class a à la fois une méthode isInstance () et une méthode isAssignableFrom () pour vérifier de tels éléments. Le plus proche de ce que vous recherchez est:

if (myClass.isInstance(obj)) {

Update: À partir de votre commentaire, vous souhaitez passer le nom d'une classe à une méthode et vérifier si quelque chose est assignable à cette classe. La seule façon de le faire est de passer le nom de la classe en tant que chaîne, puis de charger la classe et d'utiliser l'une des méthodes susmentionnées. Par exemple (gestion des exceptions omise):

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 */
    }
}
20
Ryan Stewart

Je pense que vous voulez connaître le type de classe de l'objet au moment de l'exécution. , Utilisez donc api de réflexion pour cela. et pour votre problème cette solution, je pense que le travail

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");
    }
}

}

3
NIrav Modi
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
0
Sunil Gulabani