为什么我不能有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?
}
}
答案 0 :(得分:3)
阅读有关泛型的教程:http://docs.oracle.com/javase/tutorial/java/generics/
由于类型擦除无法转换为E,请参阅http://docs.oracle.com/javase/tutorial/java/generics/restrictions.html
答案 1 :(得分:0)
这是因为泛型中的类型擦除。由于您具有通用类型<E extends B>
语句return (E) new B()
已编译为return (B) new B()
,因此您尚未获得ClassCastException
。