[英]Map.Entry m = (Map.Entry)i.next();
為什么我需要在i.next();
前面有(Map.Entry)
i.next();
? 為什么我不能只有Map.Entry m = i.next();
?
抱歉。 這是一個HashMap。
因為它顯然不是Iterator<Map.Entry>
。 可能是Iterator<Object>
或Iterator<Map.Entry<String, String>>
或其他名稱。
例如下面的Map
Map<String, Object> map = new HashMap<String, Object>();
返回以下Iterator
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
依次將以下Map.Entry
返回給next()
Map.Entry<String, Object> entry = iterator.next();
因為您沒有正確使用泛型(我知道一遍又一遍地鍵入所有內容很麻煩,但這是值得的),當它們放在一起時,他們會為您做(將其轉換為Map.Entry)
HashMap<String, YourClass> map;
Iterator<Map.entry<String, YourClass>> it = map.entrySet().iterator();
while(it.hasNext()){
Map.entry<String, YourClass> entry = it.next();//see no explicit cast
//use entry
}
作為最終提示復制粘貼(和不錯的IDE)是使用泛型的最大朋友
這有點大膽的猜測,因為您尚未發布任何代碼或未聲明要使用的Java版本,但是我猜測:
HashMap<K, V>
例如,您可能知道HashMap
具有String
鍵和Integer
值,但這不能反映在HashMap
的類型中,因此您必須強制轉換單個值。
使用泛型:
HashMap<String, Integer> map;
// ...
int sum = 0;
for (Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
it.hasNext;
) {
Map.Entry<String, Integer> e = it.next();
Integer value = e.getValue();
sum += value.intValue();
}
沒有泛型:
HashMap map;
// ...
int sum = 0;
for (Iterator it = map.entrySet().iterator();
it.hasNext;
) {
Map.Entry e = (Map.Entry) it.next();
Integer value = (Integer) e.getValue();
sum += value.intValue();
}
如果無法使用泛型(或者您正在使用提供非泛型集合的舊式庫),則只能選擇使用這些強制類型轉換。
BTW:即使你有仿制葯,這些強制類型轉換仍在引擎罩由編譯器應用。
注意:省略了foreach循環和自動拆箱,因為這些在Java 1.4和更早版本中也不可用。
因為當您不使用泛型時, i.next()
返回對象,因此必須對其進行i.next()
轉換才能進行分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.