繁体   English   中英

查看对象是否是通过字符串传递的类的实例

[英]See if an object is an instance of a class passed through a string

我想必须有一些方法来使用反射来做我想做的事情。

我需要能够在运行时获取某个类的字符串,例如:

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的东西?

听起来像你想要这样的东西:

boolean isInstance(Object o, String className) {
    try {
        Class clazz = Class.forName(className);
        return clazz.isInstance(o);
    } catch (ClassNotFoundException ex) {
        return false;
    }
}

或者你可以o.getClass()做 - 取o的类( o.getClass() ),找到所有的祖先类并将它们的名称与className进行比较。

您可以使用Class.forName(String className)根据传入的字符串值获取Class

如果您只关心它是否是特定类的实例,则可以在Class上调用isInstance(Object o)来测试该参数是否是该类的实例。

如果您确实需要该类的对象,则可以在Class上调用newInstance() 然后,您可以使用instanceOf针对另一个对象测试结果对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM