2014-10-05 78 views
0

我已經看到了有關此主題的幾個問題,但仍無法弄清楚如何解決此問題。我定義和初始化我的變量爲:嵌套的泛型和通配符

Queue<? extends Map<String, String>> q = new LinkedList<HashMap<String, String>>(); 

然後編譯。但是:

Map<String, String> m = new HashMap<String, String>(); 
m.put("foo", "bar"); 
q.add(m); 

報告編譯錯誤:no suitable method found for add(Map<String,String>)

編輯:

我認爲這是Can't add value to the Java collection with wildcard generic type不同,因爲仿製藥沒有嵌套在該問題。

此外,接受的答案教導了模板類的具體實現可以在一些聲明中省略。你不會在標記爲重複的問題上找到這個教導。

回答

0

?表示「未知類型」。由於類型未知,因此編譯器無法保證類型爲Map<String, String>。所以它拒絕讓你在隊列中添加任何東西,因爲它可能危及其類型安全。

你的變量應被聲明爲

Queue<Map<String, String>> q = new LinkedList<Map<String, String>>(); 

或簡單地說,如果你在的Java 7或更高版本

Queue<Map<String, String>> q = new LinkedList<>(); 
+0

真棒!當然!我不知道現在可以推遲宣佈實施地圖。謝謝。 – clapas 2014-10-05 13:50:40