【发布时间】:2013-04-17 16:17:05
【问题描述】:
有人可以向我解释一下编译器如何在第一次强制转换时不抱怨,但在第二次转换时却抱怨吗?
interface I1 { }
interface I2 { }
class C1 implements I1 { }
class C2 implements I2 { }
public class Test{
public static void main(String[] args){
C1 o1 = new C1();
C2 o2 = new C2();
Integer o3 = new Integer(4);
I2 x = (I2)o1; //compiler does not complain
I2 y = (I2)o3; //compiler complains here !!
}
}
【问题讨论】:
-
运行这个,你会遇到
ClassCastException,这是一个RuntimeException。 -
@BuhakeSindi 你错了
-
@BuhakeSindi OP 说编译器向我抱怨说你没有机会运行它。
-
@emory,即使他可以通过修复有编译器错误的项目来编译它,它上面的行也会导致
ClassCastException。 -
@BuhakeSindi 你错了,因为你说了你不应该说的话。水是湿的。但在这种情况下谈论这个问题是错误的。好的?显然,提问者知道这件事是因为他做了一个实验。