为了账号安全,请及时绑定邮箱和手机立即绑定

Java中“ClassCastException”的解释

Java中“ClassCastException”的解释

qq_花开花谢_0 2019-06-06 14:35:09
Java中“ClassCastException”的解释我读过一些关于“ClassCastException”的文章,但对此我没有一个好的想法。是否有一篇好文章,或者什么是简短的解释?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

的API规范。ClassCastException:

抛出以指示代码试图将对象强制转换为它不是实例的子类。

因此,例如,当一个人试图抛出一个Integer转到StringString不是Integer,所以ClassCastException会被扔出去。

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


查看完整回答
反对 回复 2019-06-06
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这非常简单:如果您试图将A类的对象类型转换为B类的对象,并且它们不兼容,则会得到类强制转换异常。

让我们考虑一个类的集合。

class A {...}class B extends A {...}class C extends A {...}
  1. 您可以将任何这些东西转换为对象,因为所有Java类都是从对象继承的。
  2. 你可以把B或C都投给A,因为它们都是A的“种类”
  3. 可以将对A对象的引用转换为B

    只有当

    真正的对象是B。
  4. 你不能把B投给C,即使他们都是A的。


查看完整回答
反对 回复 2019-06-06
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这是一个异常,如果您试图降级一个类,但实际上这个类不是该类型的。

考虑一下这个世袭制度:

对象->动物->狗

您可能有一个名为:

 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
 }


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 958 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号