我有一个不可变的类,具有以下布局,

public final class A <T> {
    private ArrayList<T> myList;
    private A(){
        myList = new ArrayList<T>();
    }
    public A<T> addData(T t){
        A newOb = // make a new list and instantiate using overloaded constructor
        T newT = new T(); ***********ERROR HERE*************
        newOb.myList.add(newT);
        return newOb;
    }
    .........
}

我在这里得到的错误是cannot instantiate type T。现在,我认为这可能与Java中的type erasure有关。

我该如何克服呢?我想将传递给addData的参数添加一个新副本。

最佳答案

在Java语言中,泛型是通过擦除实现的,因此无法实例化泛型类型。同样,不可能引发泛型类型的数组等等。



您可以尝试将Cloneable接口(interface)用作类型绑定(bind)或添加您自己的类似接口(interface)。

10-05 21:11
查看更多