2010-08-04 30 views
2

的名單如何去除:通用陣列

類型安全:類型的表達 列表[]需要選中轉換爲符合List<Object>[]

編譯器警告有以下表現:

List<Object>[] arrayOfList = new List[10]; 

回答

2

據我所知的唯一方式是使用@SuppressWarnings("unchecked")。至少如果你想避免馬修回答中出現的原始類型警告。

但是你應該重新考慮你的設計。一個列表數組?這真的有必要嗎?爲什麼不列出清單?如果它變得太複雜(List of List of List of List),使用自定義數據類型。這確實使代碼更具可讀性。

作爲一個無關的方面說明:你應該寫List<Object>[] arrayOfList。括號是類型的一部分,而不是變量。

1
List arrayOfList[] = new List[10]; 

List[] arrayOfList = new List[10]; 

您不能在Java中使用泛型數組,因此沒有理由對其進行引用。它不會是類型安全的,因此是警告。當然,您正在使用<Object>,這意味着您的列表旨在包含任何對象。但是無法使通用數組仍然適用。

另外,請注意,上面的第二個版本(與[]附加到該類型)在Java中通常被認爲是更好的樣式。它們在語義上是等效的。

1

有多種方式:

  1. 您可以添加`@SuppressWarnings分配之前(「未登記」)告訴編譯器忽略警告
  2. 使用RAW類型List[] arrayOfList = new List[10];通知,在Java中在聲明時,通常在類型後面加上[],而不是變量 - 儘管Sun會阻止使用原始類型,因爲它們可能會在未來的版本中被刪除。
  3. 不要使用數組,它通常是一個壞主意與陣列混合集合:List<List<Object>> listOfList = new ArrayList<List<Object>>;
1

如果沒有編譯器警告,您無法做任何變化。泛型和數組不會很好。雖然你可以用

@SuppressWarnings("unchecked") 
final List<Object> arrayOfList[] = new List[10]; 
0

不幸的是壓制它,由於使用type erasure的事實,泛型在Java中實現,你不能與類型參數創建一個類型的數組:

// This will give you a compiler error 
List<Object>[] arrayOfList = new ArrayList<Object>[10]; 

this在Angelika Langer的Java Generics常見問題的詳細解釋。

您可以刪除泛型和使用原始類型,馬修·富蘭琛表示,或使用的不是數組集合類:

List<List<Object>> data = new ArrayList<List<Object>>(); 
+1

-1。我的代碼編譯,因爲我在這裏實例化一個數組而不是一個列表。 – 2010-08-04 07:46:53

+0

好吧,你是對的。我的錯。編輯anwer。但這裏要理解的重要一點是,你不能創建一個參數化類型的數組。 – Jesper 2010-08-04 07:50:40