2017-08-22 27 views
1

如何將嵌套的不可變映射轉換爲映射。不兼容的類型番石榴不可變映射到Java實用程序

我有一個函數的定義:

double total(Map<String, Map<String, Double>>); 

現在對於我的測試情況下,我在下面的格式寫:

val input = ImmutableMap.of(key1, ImmutableMap.of(key2, value2)); 

不過,我得到一個錯誤類型不兼容:不可變的映射不能轉換爲

java.util.Map 

但是,如果它不是一個嵌套的地圖我能夠做到這一點。

+0

使用龍目島圖書館 – user1692342

+0

它推斷錯誤的類型。通常這樣做:Map > input = ImmutableMap.of(key1,ImmutableMap.of(key2,value2));' – shmosel

+0

@shmosel嗯有趣的是它現在起作用了。 Lombok val怎麼沒有發現它 – user1692342

回答

3

龍目島正在檢測ImmutableMap<String, ImmutableMap<String, Double>>作爲類型,與Map<String, Map<String, Double>>不兼容,詳見here。要解決,只是申報類型明確:

Map<String, Map<String, Double>> input = ImmutableMap.of(key1, ImmutableMap.of(key2, value2)); 

或者,因爲你的地圖顯然是隻讀的,你也可以用一個upper-bounded wildcard通過它,像這樣:

double total(Map<String, ? extends Map<String, Double>> m); 

這將允許它接受Map的任何子類型作爲值類型。