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

Java 为什么在用具体类型实例化对象时不可能对变量使用泛型类型?,java,generics,Java,Generics,那么,这里有什么问题 那么,这里有什么问题 第一个问题是,在D中,C引用名为C的类型参数,而不是扩展B的类C。接下来,即使忽略泛型 class D { Object c = new A(); } 。。。不会编译。。。相反,您通常会: C c = new A(); // Invalid 假设您尝试使用: A a = new C(); // Normally fine - but not if C is a type parameter! 这显然是错误的。让我重新表述一下:为什么这段代

那么,这里有什么问题

那么,这里有什么问题

第一个问题是,在D中,C引用名为C的类型参数,而不是扩展B的类C。接下来,即使忽略泛型

class D {
    Object c = new A();
}
。。。不会编译。。。相反,您通常会:

C c = new A(); // Invalid
假设您尝试使用:

A a = new C(); // Normally fine - but not if C is a type parameter!

这显然是错误的。

让我重新表述一下:为什么这段代码不起作用类A{}类D{C C=new A;}'@AlexeyGalanov:因为C可能是与A完全不同的类型。例如,它可能是字符串。泛型的全部目的是引入更多的类型安全性-如果您可以将C类型的变量声明为类型参数并将其初始化为某个完全不同的类型的引用,那么这就不太好了。因为C类型可以是任何类型,抱歉,请注意:即使OP在D中引用C类型,因为C间接扩展了a,所以会有问题。不是每个A都是C,但每个C都是A。因此,C=新的A;将导致类型不匹配。@Turing85:是的,你是右脑放屁!你的意思是改为编辑吗?
A a = new C(); // Normally fine - but not if C is a type parameter!
D<String> d = new D<String>();
String c = new A();