为什么Java无法创建类型参数的实例
作者:互联网
我知道Java不允许不创建类型参数实例.许多文章只是简单地说“类型擦除”为原因.但是在类型擦除之前不会发生类型参数初始化吗?类型擦除是唯一的原因吗?这是一个例子:
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)调用泛型方法时,我认为编译器将首先用String替换方法中的E,然后执行“Type Erase”,这是正确的吗?如果是这样,只要我们有办法确保E确实有一个默认构造函数,我们就应该能够创建类型参数的实例.有人可以更详细地解释为什么Java不允许创建参数类型的实例吗?谢谢.
解决方法:
问:如果没有泛型,你会怎么做?
通过简单地删除通用参数并在适当的位置插入强制转换,可以将具有泛型的每个程序转换为没有泛型的等效程序.这称为类型擦除.所以,如果你想知道你是否可以使用Generics,你需要首先询问你是否可以在没有Generics的情况下做到这一点.
没有Generics,你的程序看起来像这样:
public class GenObj {
public static void append(List list) {
Object elem = // what goes here?
list.add(elem);
}
public static main(){
List list= new ArrayList();
GenOjb.append(list);
}
}
标签:generic-method,java,generics 来源: https://codeday.me/bug/20190722/1507806.html