Java 将request.getParameterMap()传递给需要映射的方法时发生强制转换错误<;字符串,对象>;

Java 将request.getParameterMap()传递给需要映射的方法时发生强制转换错误<;字符串,对象>;,java,map,casting,tomcat7,arrays,Java,Map,Casting,Tomcat7,Arrays,我开始测试Tomcat7,发现了一个在Tomcat5中从未遇到过的强制转换错误。Tomcat的两个版本使用到Java6的相同路径 以下是来自JSP的调用: ImcKaView entityBrowser=new ImcKaView(); entityBrowser.setParam(request.getParameterMap(),true); 下面是正在调用的方法: public void setParam(Map<String,Object> m,boolean conver

我开始测试Tomcat7,发现了一个在Tomcat5中从未遇到过的强制转换错误。Tomcat的两个版本使用到Java6的相同路径

以下是来自JSP的调用:

ImcKaView entityBrowser=new ImcKaView();
entityBrowser.setParam(request.getParameterMap(),true);
下面是正在调用的方法:

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

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

否您不能将
Map
传递给
Map
(类型不同)。这里需要使用通配符

public void setParam(Map<String, ? extends Object> m, boolean convertCollection){
..
}
public void setParam(映射m,布尔集合){
..
}

是对
通配符
有界通配符

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

感谢您给出一个通配符用法的示例。我对“?”和“?扩展对象”之间的区别有点困惑,但我相信我能查到它。很难选择一个答案,因为他花了更多的时间解释问题,而你的问题实际上已经解决了。我只是选择了打破平局的时间。谢谢。没问题:)是的,Java泛型和通配符需要一些时间才能破解。继续练习。。
public void setParam(Map<String, ? extends Object> m, boolean convertCollection){
..
}