Java中“ClassCastException”的解释


Java中“ClassCastException”的解释

例如,当一个人试图将a转换Integer为a时String,String不是它的子类Integer,因此ClassCastException将抛出一个。

Object i = Integer.valueOf(42);
String s = (String)i;            // ClassCastException thrown here.

再例如,如果您试图将类A的对象类型转换为类B的对象,并且它们不兼容,则会出现类转换异常。

让我们想一下课程的集合。

class A {...}
class B extends A {...}
class C extends A {...}
  • 您可以将任何这些内容转换为Object,因为所有Java类都继承自Object。
  • 您可以将B或C转换为A,因为它们都是“A”类型
  • 只有当真实对象是B时,才可以将对A的引用转换为B.
  • 即使它们都是A,你也不能将B转换为C.

如果您尝试向下转换类,则会发生异常,但事实上该类不属于该类。

考虑这个继承关系:

对象 - >动物 - >

您可能有一个名为的方法:

public void manipulate(Object o) {
   Dog d = (Dog) o;
}

如果使用此代码调用:

Animal a = new Animal();
manipulate(a);

它会编译得很好,但在运行时你会得到一个ClassCastException因为o实际上是动物,而不是狗。

在Java的更高版本中,除非您执行以下操作,否则会收到编译器警告:

Dog d;
if(o instanceof Dog) {
   d = (Dog) o;
} else {
   //what you need to do if not
}