我正在做以下
String s = caseInsensitiveMap.get("buyerCode");
我收到了错误
java.lang.ClassCastException: [Ljava.lang.String; incompatible with java.lang.String
我无法弄清楚我做错了什么。谷歌搜索答案似乎指向需要在某处使用String[]
,但我不知道在哪里。
更多相关信息:
caseInsensitiveMap :Map caseInsensitiveMap - com.msw.commerce.me.commands.MSWOrgCmdImpl.setRequestProperties(TypedProperty)
.get():String java.util.Map.get(Object key)
我也尝试过
String s = caseInsensitiveMap.get((Object) "buyerCode");
将字符串"buyerCode"
显式地转换为它所需的Object类型,但是我得到了同样的错误。
有人可以告诉我我做错了什么吗?从我所看到的,我在这里匹配所有类型。 .get()
接受一个Object,我给它一个对象。它返回一个String,我将它分配给一个String。
编辑:更多代码
public void setRequestProperties(TypedProperty reqProperties)
throws ECException {
Map<String, String> reqMap = reqProperties.getMap();
Map<String, String> caseInsensitiveMap = new TreeMap<String, String>(
String.CASE_INSENSITIVE_ORDER);
caseInsensitiveMap.putAll(reqMap);
的文档
答案 0 :(得分:2)
几乎可以确定TypedProperty.getMap()是异构。它实际上是从String键到Objects的映射,因此将它分配给Map< String, String >
类型的变量是不安全的。如果您没有在
Map<String, String> reqMap = reqProperties.getMap();
这可能是因为您的开发环境中禁用了有关未经检查的转化的警告。
问题不在于密钥的类型;问题是您尝试添加到TreeMap中的值的类型。您无法将String数组转换为String,因此putAll()
将失败。
尝试将TreeMap声明为
Map<String, Object> reqMap = reqProperties.getMap();
Map<String, Object> caseInsensitiveMap = new TreeMap<String, Object>(
String.CASE_INSENSITIVE_ORDER);