在使用具体类型实例化对象时,为什么不能对变量使用泛型类型?

时间:2016-05-21 13:44:19

标签: java generics

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();
}

那么,这里有什么问题?

1 个答案:

答案 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();

明显坏了。