java.lang.ClassCastException:[Ljava.lang.String;与java.lang.String不兼容

时间:2016-05-03 18:58:28

标签: java string object dictionary casting

我正在做以下

 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);

以下是TypedProperty

的文档

1 个答案:

答案 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);