Java instanceof Inner Class cannot cast 错误
Java instanceof Inner Class cannot cast error
我正在使用 Java 并尝试使用 'instanceof' 来确定返回的对象是否是 class 中的一个实例。我必须使用的代码(不是我的代码)就是以这种方式布置的。问题是为什么 instanceof 无法正确转换以确定对象是否是 class?
的实例
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 的子class。 'instanceof' 检查想要检查对象是否是 Class1 的实例,但由于无法转换错误而失败。为什么是这样?感谢您的帮助。
---编辑---
提醒一下,这不是我的代码。我得到了这个来处理,只是在解析为什么 instanceof 不起作用时遇到了一些困难。答案很棒,我现在明白了。谢谢!
InnerClass1 is a subclass of Class1
没有 InnerClass1 extends Class2
不是 Class1
,而且 Class2
没有扩展任何 class,所以它不能是 [=13= 的显式或隐式子类型] 这意味着上面的引用是不正确的。
无论如何
myClass1.getObject() instanceof Class1
您正在检查 myClass1.getObject()
的结果是否是 Class1
的子类型。
但是编译器知道 getObject()
被声明为
public InnerClass1 getObject(){..}
所以它必须 return InnerClass1
或其子类型的实例。但是由于 InnerClass1
和 Class1
不 相关 并且它们不能有共同的祖先或共同的 child ([=中没有多重继承43=] 对于 classes 所以任何子 class 只能有一个 parent class) 不可能有 InnerClass1
的实例(或其子类型)这也将是 Class1
.
类型
因为这样的实例不存在(我不包括 null
这里)编译器不允许你编写基于这样的实例可能存在的假设的代码。
我正在使用 Java 并尝试使用 'instanceof' 来确定返回的对象是否是 class 中的一个实例。我必须使用的代码(不是我的代码)就是以这种方式布置的。问题是为什么 instanceof 无法正确转换以确定对象是否是 class?
的实例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 的子class。 'instanceof' 检查想要检查对象是否是 Class1 的实例,但由于无法转换错误而失败。为什么是这样?感谢您的帮助。
---编辑--- 提醒一下,这不是我的代码。我得到了这个来处理,只是在解析为什么 instanceof 不起作用时遇到了一些困难。答案很棒,我现在明白了。谢谢!
InnerClass1 is a subclass of Class1
没有 InnerClass1 extends Class2
不是 Class1
,而且 Class2
没有扩展任何 class,所以它不能是 [=13= 的显式或隐式子类型] 这意味着上面的引用是不正确的。
无论如何
myClass1.getObject() instanceof Class1
您正在检查 myClass1.getObject()
的结果是否是 Class1
的子类型。
但是编译器知道 getObject()
被声明为
public InnerClass1 getObject(){..}
所以它必须 return InnerClass1
或其子类型的实例。但是由于 InnerClass1
和 Class1
不 相关 并且它们不能有共同的祖先或共同的 child ([=中没有多重继承43=] 对于 classes 所以任何子 class 只能有一个 parent class) 不可能有 InnerClass1
的实例(或其子类型)这也将是 Class1
.
因为这样的实例不存在(我不包括 null
这里)编译器不允许你编写基于这样的实例可能存在的假设的代码。