我知道 Java 不允许不创建类型参数的实例。许多文章只是简单地说“Type Erase”作为原因。但是类型参数初始化不会在类型擦除之前发生吗?类型擦除是唯一的原因吗?这是一个例子:
public class GenObj {
public static <E> void append(List<E> list) {
E elem = new E(); // compile-time error
list.add(elem);
}
public static main(){
List<String> list= new ArrayList<String>();
GenOjb.append<String>(list);
}
}
当我们使用 GenOjb.append(list) 调用泛型方法时,我认为编译器会先将方法中的 E 替换为 String,然后执行“Type Erase”,对吗?如果是这样,只要我们有办法确保 E 确实有一个默认构造函数,我们应该能够创建类型参数的实例。有人可以更详细地解释为什么 Java 不允许创建参数类型的实例吗?谢谢。