Java Generic Array运行时初始化错误

时间:2015-12-29 13:17:42

标签: java arrays generics

我创建了通用数组,但构造函数无法初始化数组。当运行时程序抛出此异常时

 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);
}
}

为什么会发生这种情况,是否有解决方案?

2 个答案:

答案 0 :(得分:1)

您可以使用此构造函数

public MyList(K[] k, V[] v) {
    this.k = k;
    this.v = v;
}


public static void main(String[] args) {
    MyList<Integer,Double> values = new MyList<>(new Integer[0], new Double[0]);
    values.add(1,0.5);
}

这将有效

答案 1 :(得分:1)

数组是可再生的类型,意味着应该在运行时维护类型信息。

 k = new K[0];
 v = new V[0];

此处,由于KV是通用参数,因此类型擦除将启动并将其删除为Object

newInstance()类中使用Array方法创建通用数组。