我想有必要使用反射来做我想做的事。
我需要能够在运行时获取某个类的字符串,例如:
string s = "mypackage.MySuperClass"
然后我可能有某种类型的对象。它可能是以下之一:
mypackage.MySuperClass obj = new mypackage.MySuperClass();
或
mypackage.MySubClass obj2 = new mypackage.MySubClass();
或
someotherpackage.SomeOtherClass obj3 = new someotherpackage.SomeOtherClass();
我需要做的是查看一个对象(它的类型是在运行时确定的)是否等于字符串s(它也是在运行时通过完全不同的方式确定的)。
在上面的例子中,我希望obj和obj2与s的类型相同(因为MySubClass是MySuperClass的子类),而obj3则不会。
在java中有一种简单的方法吗?可能是使用instanceOf的东西?
答案 0 :(得分:7)
听起来你想要这样的东西:
boolean isInstance(Object o, String className) {
try {
Class clazz = Class.forName(className);
return clazz.isInstance(o);
} catch (ClassNotFoundException ex) {
return false;
}
}
或者你可以反过来做 - 取o的课程(o.getClass()
),找到所有的祖先课程,并将他们的名字与className
进行比较。
答案 1 :(得分:1)
您可以使用Class.forName(String className)
根据传入的字符串值获取Class
。
如果您只关心它是否是特定类的实例,则可以在isInstance(Object o)
上调用Class
来测试该参数是否是该类的实例。
如果您确实需要班级的对象,可以在newInstance()
上拨打Class
。然后,您可以使用instanceOf
针对另一个对象测试生成的对象。