2013-02-13 118 views
7

我正在编写一个方法,我想将一个类传递给方法,其中一部分代码包含检查对象是否属于某种类型。这是我想要的(但显然不工作):将类作为参数传递给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 */ 
    } 
} 

任何提示如何做到这一点?谢谢!

回答

19

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

我不相信我制定了我的问题不够清晰 - 麻烦的是,我希望能够使用instanceof,即我希望我通过的“班级”成为班级的名字。 – tor 2013-02-13 05:23:40

+1

已更新。这更接近你要找的东西吗? – 2013-02-13 05:26:06

2

我想你想知道在运行时对象的类类型.. 所以用反光标识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 
+1

尼斯一个Sunil ... – 2013-03-11 10:21:22

相关问题