使用“* .isInstance”的正确方向是什么?

时间:2014-06-19 06:24:22

标签: java identity proof isinstance

每次我再次阅读Java文档时,我都很困惑。 所以请尽量用自己的话来帮助我。

List<Parent> list = new ArrayList<Parent>();
//Child extends Parent...
list.add(new Child());
...
...
for(Parent p: list){
    if(p.getClass().isInstance(Child)){
            Child c = (Child) p;
            c.execFuncNonExistingInParent();
    }
}

只想证明来自Parent的Objects继承,以避免Cast问题。

if(p.getClass().isInstance(Child.class))

if(Child.class.isInstance(p.getClass()))

Greatings Oekel

1 个答案:

答案 0 :(得分:3)

那不是要检查你想要检查的方式。你想要:

if (Child.class.isInstance(p))

这相当于:

if (p instanceof Child)

...除了你可以指定要动态检查的类,而不是在编译时修复它。如果您 在编译时知道该类(如您的示例所示),那么只需使用instanceof运算符。

对于isInstance,由于签名的原因,一旦你记得它等同于instanceof,很容易分清它的方向:

// In Class
public boolean isInstance(Object obj)

您希望等效于obj instanceof clazz,其中obj可以是任何对象引用,而clazz必须是一个类...所以您真的拥有将其称为clazz.isInstance(obj)