每次我再次阅读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
答案 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)
。