gpt4 book ai didi

java - 使用 "*.isInstance"的正确方向是什么?

转载 作者:行者123 更新时间:2023-12-01 22:54:24 24 4
gpt4 key购买 nike

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

只是想证明对象从父级继承,以避免强制转换问题。

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

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

伟大的厄克尔

最佳答案

这并不是检查您想要检查的内容。你想要:

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)

关于java - 使用 "*.isInstance"的正确方向是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24300012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com