Java通用数组运行时初始化错误
我已创建泛型数组,但构造函数无法初始化数组。当运行时程序抛出此异常时
Exception in thread "main" java.lang.RuntimeException:
Uncompilable source code - generic array creation
如何正确初始化泛型数组
class MyList<K,V>{
K[] k;
V[] v;
public MyList() {
k = new K[0];
v = new V[0];
}
public void add(K key, V val){
Object[] ob1 = new Object[k.length+1];
Object[] ob2 = new Object[v.length+1];
for (int i = 0; i < k.length; i++) {
ob1[i]=k[i];
ob2[i]=v[i];
}
ob1[k.length]=key;
ob2[v.length]=val;
k=(K[]) ob1;
v=(V[]) ob2;
}
public static void main(String[] args) {
MyList<Integer,Double> values = new MyList<>();
values.add(1,0.5);
}
}
为什么会发生这种情况,有解决办法吗
# 1 楼答案
您可以使用这个构造函数
这会奏效的
# 2 楼答案
数组是可重新定义的类型,这意味着应该在运行时维护这些类型信息
这里,由于
K
和V
是泛型参数,因此类型擦除将启动并将它们擦除到Object
在
Array
类中使用newInstance()
方法来创建泛型数组