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