为什么我不能有classcastexception?

时间:2012-11-24 12:39:34

标签: java

为什么我不能有classcastexception? E在示例中表示C,不是吗? B不是C,我认为我的演员必须只适用于编译器。 我的错误在哪里?

public class A{
public static void main(String...s){
    Monitor<C> m = new Monitor<C>(); 
    C arg2 = new C();
    B d = m.f(arg2);
    System.out.println(d);
    }
}
class B extends A{}
class C extends B{}
class Monitor<E extends B>{
public E f(E E){
    return (E) new B();//Why this place didn't give me ClassCastException?
}
}

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

这是因为泛型中的类型擦除。由于您具有通用类型<E extends B>语句return (E) new B()已编译为return (B) new B(),因此您尚未获得ClassCastException