【问题标题】:What is the right direction of using "*.isInstance"?使用“*.isInstance”的正确方向是什么?
【发布时间】:2014-06-19 06:24:22
【问题描述】:

每次我再次阅读 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();
    }
}

只是想证明 Objects 从 Parent 继承,以避免 Cast 问题。

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

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

欧克尔

【问题讨论】:

  • if(p.getClass().isInstance(Child.class))if(Child.class.isInstance(p.getClass())) 是一样的。比如 (1==(2-1)) 或 ((2-1)==1)
  • pClass.isInstance(child) return true 表示 child 是 pClass 的一个实例

标签: java identity proof isinstance


【解决方案1】:

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

if (Child.class.isInstance(p))

相当于:

if (p instanceof Child)

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

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

// In Class
public boolean isInstance(Object obj)

您想要obj instanceof clazz 的等价物,其中obj 可以是任何对象引用,而clazz 必须是一个类...所以您真的 将其称为@987654330 @。

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 2010-10-23
    • 1970-01-01
    • 2021-11-24
    • 2021-09-23
    • 2017-04-07
    • 2013-01-09
    • 2013-03-19
    • 2019-05-11
    相关资源
    最近更新 更多