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();
}
那么,这是什么问题呢?
那么,这是什么问题呢?
第一个问题是,在中D<C>
,C
是指称为的类型参数C
,而不是C
extends的类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();
那显然是坏的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句