class A{}
class B extends A {}
class C extends B {}
class D<C> {
C c = new A(); // COMPILER ERROR
}
在类型擦除代码变为:
之后class D {
Object c = new A();
}
那么,这里有什么问题?
答案 0 :(得分:3)
那么,这里的问题是什么?
第一个问题是,在D<C>
中,C
指的是名为C
的类型参数,而不是扩展的类C
B
。接下来,甚至忽略了泛型,
C c = new A(); // Invalid
...不会编译......相反,你通常会有:
A a = new C(); // Normally fine - but not if C is a type parameter!
假设您尝试使用:
D<String> d = new D<String>();
然后,您有效地要求编译器认为此行有效:
String c = new A();
明显坏了。