2011-03-22 58 views
1

在下面的短代碼片斷,Eclipse的標誌有關String key = pair.getKey();String value = pair.getValue();報表的錯誤,說爲什麼Map <String,String>的鍵(或值)不以String返回?

「類型不匹配:不能轉換從 對象到字符串」

這是相關代碼:

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,所以我想在繼續解決方案之前瞭解發生了什麼。

回答

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(); 
    }    
} 
+0

以及所有非常感謝! – 2011-03-22 14:04:12

8

您沒有通過itpair

攜帶的類型

試試這個

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

該死的,打我吧:-) +1 – 2011-03-22 14:01:23

0

您將Entry作爲原始未參數化類型類型。

使用Entry<String, String>而不是原始的Entry

0

您的Map.Entry聲明未按類型參數化。

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

}

1

基本上這個想法是,你迭代器(它)記錄(配對)也應該是泛型化的。

   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(); 
       }   
相關問題