0

I am confused every time I read the Java Documentation again to that. So please try to help me in your own words.

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();
    }
}

Just wanna proof the Objects inheritances from Parent, to avoid Cast Problems.

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

or

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

Greatings Oekel

4

1 回答 1

4

这不是检查你想要检查的任何一种方式。你要:

if (Child.class.isInstance(p))

这相当于:

if (p instanceof Child)

...除了您可以指定要动态检查的类,而不是在编译时对其进行修复。如果您在编译时确实知道该类(如您的示例中所示),则只需使用instanceof运算符即可。

因为isInstance,很容易判断它是哪条路,一旦你记住它等同于instanceof,因为签名:

// In Class
public boolean isInstance(Object obj)

你想要obj instanceof clazz, whereobj可以是任何对象引用,并且clazz必须是一个类......所以你真的必须把它称为clazz.isInstance(obj).

于 2014-06-19T06:27:05.463 回答