0

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?
}
}
4

2 に答える 2

3

ジェネリックに関するチュートリアルを読む:http://docs.oracle.com/javase/tutorial/java/generics/

型消去のため、Eにキャストすることはできません。http://docs.oracle.com/javase/tutorial/java/generics/restrictions.htmlを参照してください

于 2012-11-24T12:47:26.350 に答える
0

これは、ジェネリックスの型消去が原因です。ジェネリック型の<E extends B>ステートメントreturn (E) new B()がコンパイルされてreturn (B) new B()いるので、を取得していませんClassCastException

于 2012-11-24T12:51:42.037 に答える