2011-02-15 96 views
0

我有使用泛型下面的代碼:「Set是一個原始類型引用泛型類型<Ë>應該被參數化」如何使用自定義類作爲Iterator的類型變量?

 
Set membersKeySet = membersList.keySet(); 
Iterator<DoubleKey> membersItr = membersKeySet.iterator(); 
while(membersItr.hasNext()){ 
    DoubleKey<Integer, Integer> dk = membersItr.next(); 
} 

Eclipse的告訴我。 DoubleKey也是一個通用類。我所知道的是.iterator()方法不能保證DoubleKey類已經傳遞了相同的參數類型。我嘗試了類型轉換,但它不起作用。我該如何解決這個問題?謝謝!

P.S.我仍然在使用泛型。

回答

4

如果存儲在集中的對象是DoubleKey<Integer, Integer>實例,則代碼應該是這樣的:

Set<DoubleKey<Integer, Integer>> membersKeySet = membersList.keySet(); 
Iterator<DoubleKey<Integer, Integer>> membersItr = membersKeySet.iterator(); 
while(membersItr.hasNext()){ 
    DoubleKey<Integer, Integer> dk = membersItr.next(); 
} 
+0

是啊!我剛剛做完。哈哈。我沒有意識到我沒有在Set中指定類型變量。感謝Stackoverflow的人! – Jairo 2011-02-15 19:00:16

0

您應該定義鍵集的類型。

Set<DoubleKey> membersKeySet = membersList.keySet(); 

請您提供memberList的定義以提供完整的圖片嗎?

0

那麼根據什麼membersList是,我希望這是解決方案:

Set<DoubleKey> membersKeySet = membersList.keySet(); 

如果membersList使用原始類型,就成了棘手的聲明......但我們會船到橋頭當你檢查是否這就是你需要:)

0

從你給出的代碼看來,membersList實際上是某種映射。因此,爲了得到泛型的編譯時類型安全,membersList應適當定義,像

Map<DoubleKey, Object> membersList = new HashMap<DoubleKey, Object>(); 
Set<DoubleKey> membersKeySet = membersList.keySet(); 

用的東西,你的迭代應該工作,你擁有它。

0

通常你會使用小型for循環符號:

 
while(DoubleKey<Integer, Integer> dk: membersList.keySet()) { 
} 

如果您正在使用DoubleKey&lt;Integer, Integer&gt;所有的地方,可考慮將其類的所有對自己:

 
class IIKey extends DoubleKey<Integer, Integer> {} 
+0

你的意思是``不``while' – newacct 2011-02-17 10:41:27

相關問題