Generics 奇怪的JDK行为,应该编译吗?

Generics 奇怪的JDK行为,应该编译吗?,generics,compilation,java,Generics,Compilation,Java,正如预期的那样,编译失败。问题在于: public class Main { 您使用原始版本的Main(不带泛型),因此将忽略所有泛型信息。不过,您应该得到一个编译器警告 如果您尝试: new Main().guru(list); ^^^^ newmain().guru(列表); 您应该会得到一个编译错误 更准确地说,当使用原始类型:new Main()时,会执行类型擦除,这不仅会从类型本身擦除泛型信息,还会: 原始类型C[…]的构造函数(§8.8)、实例方法(§8.4,§9

正如预期的那样,编译失败。

问题在于:

public class Main {
您使用原始版本的
Main
(不带泛型),因此将忽略所有泛型信息。不过,您应该得到一个编译器警告

如果您尝试:

new Main().guru(list);
       ^^^^
newmain().guru(列表);
您应该会得到一个编译错误

更准确地说,当使用原始类型:
new Main()
时,会执行类型擦除,这不仅会从类型本身擦除泛型信息,还会:

原始类型C[…]的构造函数(§8.8)、实例方法(§8.4,§9.4)或非静态字段(§8.3)M的类型是与C对应的泛型声明中其类型的擦除相对应的原始类型


非常感谢,我认为原始版本意味着只忽略实际参数(在本例中)。这解释了一切。
new Main<Integer>() //or any other type
public class Main {
new Main().guru(list);
       ^^^^
new Main<SomeType>().guru(list);