Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何摆脱ClassCastException_Java_Classcastexception - Fatal编程技术网

Java 如何摆脱ClassCastException

Java 如何摆脱ClassCastException,java,classcastexception,Java,Classcastexception,假设我有两个完全不同的用户定义类A和B A A=新A() bb=新的B() a=(a)b//我很确定这会引发ClassCastException,但是如何处理这个问题呢?你不能,除非B派生自a。 这就是ClassCastException的要点 但是既然A和B完全不同,为什么首先要转换它们呢?在分配变量之前先进行测试 在java中: if(a instanceof B) b = (B) a; 在C#中: 但正如有人提到的,如果你不从c中推导出a类和b类,我看不出这项作业有多大好处。

假设我有两个完全不同的用户定义类
A
B

A A=新A()

bb=新的B()


a=(a)b//我很确定这会引发ClassCastException,但是如何处理这个问题呢?

你不能,除非B派生自a。
这就是ClassCastException的要点


但是既然A和B完全不同,为什么首先要转换它们呢?

在分配变量之前先进行测试

在java中:

if(a instanceof B)
    b = (B) a;
在C#中:


但正如有人提到的,如果你不从c中推导出a类和b类,我看不出这项作业有多大好处。

你所说的“如何处理它”是什么意思。如果它要引发一个
ClassCastException
,它很可能会在编译时引发。如果您想在运行时捕获它,请使用try-catch块。这个问题需要更加清楚。@BrettWalker
ClassCastException
不会在编译时发生。编译错误发生在编译时。@OP当我们在编译时,你说的“我很确定”是什么意思。你不知道吗?如果没有,你根本没有理由发布这个问题。从技术上讲,这是一个过于简单化的问题。这里的全部细节:确实不能在“完全不相关的类”之间转换,但是“除非A派生自B”并不完全准确#只是说你比我强——应该是“除非B来自A”。在Java中,仅仅有一个共同的祖先是不够的;一个人必须是另一个人的祖先。他们已经将对象作为共同的祖先。
if(a is B)
    b = (B) a;