我有一个不可变的类,具有以下布局,
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)。