Java:建立有泛型的Collection陣列

最近遇到的問題,想將JMenuItem分成三類,每個類別要能動態增減,不過減得機率很少,所以建立了ArrayList帶有泛型的Collection陣列,不過卻不能直接的建立,該如何解決!?

關鍵詞: create array of java generic collection



import java.util.ArrayList;
import javax.swing.JMenuItem;

/**
建立如何建立包函泛型的Collection陣列。
*/
class ArrayOfGenericCollection
{
public static void main(String [] args)
{
// 最直覺的寫法,不過這個寫法是無法通過編譯的。
//ArrayList<JMenuItem> gat[] = new ArrayList<JMenuItem>[10];

// 下面的寫法是利用Java陣列的基本概念,加上轉型,
// 不過因為動態轉型所以編譯帶有警告。
// 且執行時期因為Object無法轉成ArrayList,所以這樣也行不通。
//ArrayList<JMenuItem> gat2[] = (ArrayList<JMenuItem>[])new Object[10];

// 上面的寫法,既然無法將Object轉成ArrayList,
// 那我們就建立一個不帶泛型標記的ArrayList
// (有標記的就是一開始的寫法)
// 編譯加執行成功!!
ArrayList<JMenuItem> gat3[] = (ArrayList<JMenuItem>[])new ArrayList[10];

for (int i=gat3.length-1; i>=0; --i)
gat3[i] = new ArrayList<JMenuItem>(5);
System.out.println("gat3[1].size()="+gat3[1].size());

// 轉型少了泛型也是可以的,因為隱含轉型也合法。
// 同樣的,編譯加執行成功!!
ArrayList<JMenuItem> gat3_s[] = (ArrayList[])new ArrayList[10];

for (int i=gat3_s.length-1; i>=0; --i)
gat3_s[i] = new ArrayList<JMenuItem>(5);
System.out.println("gat3_s[1].size()="+gat3_s[1].size());
}
}


註解就是邊寫邊改的過程,本篇結束(#_#)

留言