Java Map.Entry m=(Map.Entry)i.next();
为什么我需要在Java Map.Entry m=(Map.Entry)i.next();,java,Java,为什么我需要在I.next()前面有(Map.Entry)?为什么我不能只使用Map.Entry m=I.next() 对不起。它是一个HashMap。因为它显然不是一个迭代器。它可能是一个迭代器,或者是一个迭代器或者其他什么东西 例如,下面的Map Map<String, Object> map = new HashMap<String, Object>(); 这将依次提供以下Map.Entry返回next() Map.Entry=iterator.next(); 因
I.next()前面有(Map.Entry)
代码>?为什么我不能只使用Map.Entry m=I.next()代码>
对不起。它是一个HashMap。因为它显然不是一个迭代器。它可能是一个迭代器
,或者是一个迭代器
或者其他什么东西
例如,下面的Map
Map<String, Object> map = new HashMap<String, Object>();
这将依次提供以下Map.Entry
返回next()
Map.Entry=iterator.next();
因为它显然不是一个迭代器。它可能是一个迭代器
,或者是一个迭代器
或者其他什么东西
例如,下面的Map
Map<String, Object> map = new HashMap<String, Object>();
这将依次提供以下Map.Entry
返回next()
Map.Entry=iterator.next();
因为i.next()
当您不使用泛型时返回对象,您必须强制转换它才能分配它。因为i.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
}
HashMap;
迭代器it=map.entrySet().Iterator();
while(it.hasNext()){
Map.entry=it.next();//看不到显式强制转换
//使用条目
}
作为最后的提示,复制粘贴(和一个像样的IDE)是泛型的最好朋友,因为你没有正确地使用泛型(我知道一遍又一遍地键入所有内容很麻烦,但这是值得的),当所有内容都在一起时,他们会为你这样做(转换为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
}
HashMap;
迭代器it=map.entrySet().Iterator();
while(it.hasNext()){
Map.entry=it.next();//看不到显式强制转换
//使用条目
}
作为最后一点提示,复制粘贴(和一个像样的IDE)是泛型的最好朋友这有点胡乱猜测,因为您没有发布任何代码或说明您使用的Java版本,但我猜:
- 你已经习惯了Java(≥1.5)使用泛型的代码,例如
HashMap
- 您现在正在维护为Java1.4或更早版本编写的代码库,该代码库不使用泛型
e、 g.您可能知道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();
}
如果泛型不可用(或者您使用的是提供非泛型集合的遗留库),您别无选择,只能应用这些强制转换。
顺便说一句:即使你有泛型,这些类型转换仍然由编译器在后台应用
注意:省略foreach循环和自动取消装箱,因为它们在Java 1.4和更早版本中也不可用。这有点胡乱猜测,因为您没有发布任何代码或说明正在使用的Java版本,但我猜:
- 你已经习惯了Java(≥1.5)使用泛型的代码,例如
HashMap
- 您现在正在维护为Java1.4或更早版本编写的代码库,该代码库不使用泛型
e、 g.您可能知道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();
}
如果泛型不可用(或者您使用的是提供非泛型集合的遗留库),您别无选择,只能应用这些强制转换。
顺便说一句:即使你有泛型,这些类型转换仍然由编译器在后台应用
注意:忽略foreach循环和自动取消装箱,因为它们在Java 1.4和更早版本中也不可用。您能提供一些关于这个问题的上下文吗?除非我被明确定义为类型Map.Entry的列表,否则您需要将下一个()结果强制转换为Map.Entry。如果我们不知道“i”是什么,那么回答这个问题有点困难is.需要更多的上下文。你能发布整个方法(或者只是循环?)吗?它是什么版本的Java?你能为这个问题提供一些上下文吗?除非我被显式定义为Map.Entry类型的列表,否则你需要将next()结果强制转换为Map.Entry。如果我们不知道什么是“i”,那么回答这个问题有点困难是。需要更多的上下文。你能发布整个方法(或者只是循环?)吗?它是什么版本的Java?Iterator
会很奇怪(或者至少“罕见”)。可能只是一个Iterator
Iterator
会很奇怪(或者至少“罕见”)。可能只是一个Iterator
。