Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Map.Entry m=(Map.Entry)i.next();_Java - Fatal编程技术网

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