2011-08-26 105 views
1

所以我一直在尋找答案,我只是不知道它是如何工作的。Java:如何初始化類型化對象列表?

我在嘗試製作一個BloomFilter<String>對象的列表。

的布隆過濾器的類定義是:

public class BloomFilter<E> implements Serializable { ... 

<E>允許用戶選擇什麼類型的元素正在進入所述過濾器。在我的情況下,我需要字符串。

在程序的其他地方,我需要4個BloomFilter<String>對象。

我的問題是:如何初始化以下行?

private static BloomFilter<String> threadedEncrpytionFilters[] = null; 
threadedEncryptionFilters = ??? 

這似乎與創建ArrayList列表類似?這也是可能的嗎?

+0

你的問題有點不清楚......你想要一個這些對象的列表或數組? – Jon7

回答

4

看到有人alread回答了這個問題之後,我想刪除這個答案,但我所作的評論看,人們仍然感到困惑所以這裏有雲:)

該規範明確指出,您要做的事是非法的。含義:

BloomFilter<String> threadedEncrpytionFilters[] = new BloomFilter<String>[4]; 

不會編譯。你不能創建一個具體的泛型類的數組。當談到仿製藥,你只能在陣列存儲:

  • 原始類型
  • 無界通配符parameteriezd類型

變通辦法是你的問題是,如前所述,改變陣列的List<BloomFiler<String>>

如果考慮到Java在不同階段(編譯,運行時等)如何處理泛型類型,此行爲實際上非常合理。瞭解到您會看到具體泛型類型的數組不會是類型安全的。這裏有一個很好的閱讀關於這個問題:http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ104

+0

+1 - 很好的答案。 – Kal

1

考慮一下:

private static List<BloomFilter<String>> threadedEncrpytionFilters = 
    new ArrayList<BloomFilter<String>>(); 
2
List<BloomFilter<String>> list = new ArrayList<BloomFilter<String>>(); 
list.add(new BloomFilter<String>()); 
list.add(new BloomFilter<String>()); 
list.add(new BloomFilter<String>()); 
// ... and so on 
+0

完美!謝謝!我沒有意識到你可以像這樣嵌套類型參數。 – theangryhornet

+0

你也可以添加到你的答案如何實例和聲明數組:[BloomFilter [] threadedEncrpytionFilters = new BloomFilter [100];' – Marcelo

+0

@Marcelo:這裏的重點是你的代碼不會編譯。 –