Java不允许使用"new List<T>"的主要原因是因为Java中的泛型是在编译时期进行类型擦除的。在编译时,所有的泛型类型参数都会被擦除为它们的上界或者Object类型。
这意味着在运行时,Java无法确定泛型类型的具体参数,因此无法直接实例化一个泛型类型的对象。如果允许使用"new List<T>"这样的语法,编译器无法确定T的具体类型,也无法进行类型检查和类型推断。
为了解决这个问题,Java提供了泛型类型的实例化方式,即通过创建一个具体的子类或实现类来实例化泛型类型。例如,可以使用"new ArrayList<T>()"来实例化一个泛型ArrayList对象。
这种方式可以通过子类或实现类来确定泛型类型的具体参数,从而进行类型检查和类型推断。这样做的好处是可以在编译时期进行类型安全检查,避免在运行时出现类型错误。
总结起来,Java不允许"new List<T>"是因为泛型类型在编译时期进行类型擦除,无法确定具体的泛型参数,因此需要使用具体的子类或实现类来实例化泛型类型。
领取专属 10元无门槛券
手把手带您无忧上云