在Java中将一个类作为参数传递给一个方法

12
我正在编写一个方法,希望将一个类作为参数传递给该方法,在代码的一部分中包括检查对象是否属于某种类型。以下是我的期望(但显然不起作用):
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 */
    }
}
任何关于如何完成这个任务的提示吗?谢谢!
3个回答

23

Class有一个isInstance()方法和一个isAssignableFrom()方法,用于检查这些内容。最接近您要查找的内容是:

if (myClass.isInstance(obj)) {

更新:根据您的评论,您想将一个类的名称传递给一个方法并检查是否可以分配给该类。唯一的方法是将类名作为字符串传递,然后加载类并使用前面提到的方法之一。例如(省略异常处理):

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

我不相信我表达清楚了我的问题 - 麻烦在于我想要能够使用instanceof,也就是说,我希望传递的“Class”是一个类的名称。 - tor
1
更新了。这是否更接近您所寻找的内容? - Ryan Stewart

3
我想您希望在运行时知道对象的类类型,所以可以使用反射API来实现。我认为这个解决方案对于您的问题可能有用。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接