2015-12-29 28 views
1

我已經創建了通用的陣列,但構造函數不能初始化數組。運行時程序拋出此異常時的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); 
} 
} 

爲什麼會發生這種情況,有沒有解決辦法?

+0

不能使用映射(HashMap的)用於此目的,而不是實現一個新的通用陣列? –

+0

經典問題,C++和Java程序員區分:是否可以寫'K K =新K()'模板/仿製藥方面? – Arkadiy

回答

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

數組是reifiable類型,意味着輸入的信息應保持在運行。

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

這裏,因爲KV是通用的參數,類型擦除會踢,他們抹到Object

使用newInstance()方法Array類創建通用陣列。