抛出错误将request.getParameterMap()传递给期望Map <string,object> </string,object>的方法

时间:2014-01-28 19:29:41

标签: java map casting tomcat7 arrays

我开始测试Tomcat 7并发现了我在Tomcat 5中没有遇到的强制转换错误。两个版本的Tomcat都使用与Java 6相同的路径。

这是来自JSP的调用:

ImcKaView entityBrowser=new ImcKaView();
entityBrowser.setParam(request.getParameterMap(),true);

这是被调用的方法:

public void setParam(Map<String,Object> m,boolean convertCollection){/* set param code */}

以下是施法错误:

ImcKa类型中的方法setParam(Map<String,Object>, boolean)不适用于参数(Map<String,String[]>, boolean)

我不应该将Map<String,String[]>传递给Map<String,Object>吗?

在回答后更新Tomcat相关部分:

我对所选答案非常满意,因为我明确提到了String []到Object的强制转换问题。

对于那些来到这里仍然感到困惑的人来说,只有在切换Tomcat版本时才会出现此问题,request.getParameterMap()的定义并未在较旧的Tomcat中输入:

Tomcat 5.5:

public java.util.Map getParameterMap()

Tomcat 7.0:

public java.util.Map<java.lang.String,java.lang.String[]> getParameterMap()

2 个答案:

答案 0 :(得分:0)

不,你不能将Map<String,String[]>传递给Map<String,Object>(类型不一样)。在这里你需要使用通配符

public void setParam(Map<String, ? extends Object> m, boolean convertCollection){
..
}

Here是对wildcardsbounded wildcards的良好解释。

答案 1 :(得分:0)

Java中的泛型不是协变的。这意味着Map<String,String[]>不是Map<String,Object>的子类型。类型参数(String[]是-a Object)之间的关系不会使泛型类型(Map<String,String[]>Map<String,Object>)相关。