编程语言
首页 > 编程语言> > 为什么Java无法创建类型参数的实例

为什么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