【发布时间】:2018-02-02 21:11:14
【问题描述】:
我正在使用 Java 并尝试使用“instanceof”来确定返回的对象是否是类中的实例。我必须使用的代码(不是我的代码)以这种方式布局。问题是为什么 instanceof 不能正确转换以确定对象是否是类的实例?
public class MainClass{
public static void main(String[] args){
Class1 myClass1 = new Class1();
if(myClass1.getObject() instanceof Class1){} ///<--- Cast Error
}
}
public class Class1 extends ObjectClass{
public InnerClass1 getObject(){
return (InnerClass1)object;
}
public static abstract class InnerClass1 extends Class2{}
}
public class Class2 {}
public class ObjectClass {
final Class2 object = new Class2();
}
如您所见,该对象是 Class2 的一个实例。当调用“get”方法时,它会将对象转换为扩展 Class2 的 InnerClass1 类型。 InnerClass1 是 Class1 的子类。 “instanceof”检查想要检查对象是否是 Class1 的实例,但它失败并出现无法转换错误。为什么是这样?感谢您的帮助。
---编辑--- 只是提醒一下,这不是我的代码。我得到了这个工作,只是在解析为什么 instanceof 不工作时遇到了一些困难。答案很好,我现在明白了。谢谢!
【问题讨论】:
-
Class2不是InnerClass1的子类。 -
补充@tsolakp 所说的,
Class2首先不是子类。 -
如果您首先对临时引用执行
getObject方法,例如:Object tempObject = myClass.getObject();,您会看到错误来自何处。尽量不要使您的代码过于复杂,因为它通常会导致您现在遇到的此类误解。
标签: java casting inner-classes instanceof