为什么Map <string,string =“”>的键(或值)不作为String返回?</string,>

时间:2011-03-22 13:56:34

标签: java map

在下面的简短代码片段中,Eclipse标记了有关String key = pair.getKey();String value = pair.getValue();语句的错误,并说明了

  

“类型不匹配:无法转换   对象到字符串“

这是相关代码:

    for (Map<String, String> dic : dics) {
        Iterator it = dic.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            String key = pair.getKey();
            String value = pair.getValue();
        }               
    }

为什么?

到目前为止我看到的所有示例都没有将pair.getKey()或pair.getValue()强制转换为String,所以我想在继续解决之前了解发生了什么。

6 个答案:

答案 0 :(得分:11)

试试这个:

for (Map<String, String> dic : dics) {
    Iterator<Map.Entry<String, String>> it = dic.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry<String, String> pair = it.next();
        String key = pair.getKey();
        String value = pair.getValue();
    }               
}

甚至更好(内部工作是相同的,但这不那么冗长):

for (Map<String, String> dic : dics) {
    for(Map.Entry<String, String> pair : dic.entrySet()){
        String key = pair.getKey();
        String value = pair.getValue();
    }               
}

答案 1 :(得分:8)

您尚未通过itpair

传输类型

试试这个

for (Map<String, String> dic : dics) {
    for (Map.Entry<String, String> pair : dic.entrySet()) {
        String key = pair.getKey();
        String value = pair.getValue();
    }               
}

答案 2 :(得分:1)

试试这个:

for (Map<String, String> dic : dics) {
  Iterator<Map.Entry<String, String>> it = dic.entrySet().iterator();
  while (it.hasNext()) {
    Map.Entry<String, String> pair = it.next();
      String key = pair.getKey();
      String value = pair.getValue();
  }               

}

答案 3 :(得分:1)

基本上,我们的想法是你的迭代器(it)条目(对)也应该是泛型化的。

                Iterator<Entry<String, String>> it = dic.entrySet().iterator();
                while (it.hasNext()) {
                     Entry<String, String> pair = it.next();
                    String key = pair.getKey();
                    String value = pair.getValue();
                }        

答案 4 :(得分:0)

您将Entry作为原始非参数化类型类型。

使用Entry<String, String>代替原始Entry

答案 5 :(得分:0)

您的Map.Entry声明未按类型参数化。