迭代HttpServletRequest参数映射的入口集时出错

时间:2013-06-28 06:25:56

标签: java generics

这是我的源代码:

for (Map.Entry<String, String[]> e : request.getParameterMap().entrySet()) {
  if(e.getValue() != null && e.getValue().length > 0) { 
    someMap.put(e.getKey(), e.getValue()[0]);
  } else {
    someMap.put(e.getKey(), e.getValue());
  }
}

我得到了这个编译错误:

Type mismatch: cannot convert from element type Object to Map.Entry<String, String[]>

上面代码的第一行引发了异常。事情就是这段代码在Eclipse 7 / Java 7中编译并运行顺利;但是,在具有相同Java版本的项目构建器中无法执行此操作。想知道导致此错误的原因以及如何解决此问题。感谢。

2 个答案:

答案 0 :(得分:2)

看起来像投射问题:您需要将request.getParameterMap()投射到Map<String, String[]>

 for (Map.Entry<String, String[]> entry :
 ((Map<String, String[]>)request.getParameterMap()).entrySet()) {
    // rest of your work-arround
 }

或迭代如下:

for(Object obj :request.getParameterMap().entrySet()) {
    Map.Entry<String, String[]> entry = (Map.Entry<String, String[]>) obj;
    if(entry.getValue() != null && entry.getValue().length > 0) { 
       someMap.put(entry.getKey(), entry.getValue()[0]);
    } else {
       someMap.put(entry.getKey(), entry.getValue());
    }
}

答案 1 :(得分:0)

我意识到这是一个古老的问题,但它再次让我感到高兴。我使用的是JEE 6 servlet API,它与Entry配合得很好。在改变项目中其他看似无关的东西后,我得到了完全相同的错误。事实证明我已经更新了我的依赖项(使用IVY,但这几乎无关紧要)。其中一个依赖项下载了一个包含JEE 5 servlet API的jar,它不使用泛型。在搜索了下载的罐子之后,我找到了有问题的罐子(javaee-api-5.0-2.jar)并将其排除在常春藤中。快速更新,一切恢复正常。