将类作为参数传递给java中的方法
问题描述:
我正在编写一个方法,我想将一个类传递给方法,其中一部分代码包含检查对象是否属于某种类型。这是我想要的(但显然不工作):将类作为参数传递给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 */
}
}
任何提示如何做到这一点?谢谢!
答
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 */
}
}
答
我想你想知道在运行时对象的类类型.. 所以用反光标识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");
}
}
}
答
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
我不相信我制定了我的问题不够清晰 - 麻烦的是,我希望能够使用instanceof,即我希望我通过的“班级”成为班级的名字。 – tor 2013-02-13 05:23:40
已更新。这更接近你要找的东西吗? – 2013-02-13 05:26:06