2017-08-22 1 views
1

どのようにして入れ子にされた不変のマップをマップに変換できますか?互換性のない型Guava不変のJavaユーティリティマップへのマップ

私は関数定義を持っている:

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

は今私のテストケースのために、私は次の形式で書いています:

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

私はエラーが互換性のないタイプの取得しかし:不変地図をすることはできませんが

java.util.Map 

しかし、それがネストされたマップではない場合、私はそれを行うことができます。

+0

Lombokライブラリを使用しています – user1692342

+0

間違ったタイプを推測しています。これは通常通りです: 'Map > input = ImmutableMap.of(key1、ImmutableMap.of(key2、value2)); ' – shmosel

+0

@shmoselどのようにロンボクバルはそれを検出しなかった – user1692342

答えて

3

ロンボクはタイプとしてImmutableMap<String, ImmutableMap<String, Double>>を検出していますが、これは長さhereで説明したMap<String, Map<String, Double>>と互換性がありません。修正するには、単に明示的に型を宣言:あなたのマップが明らかに読み取り専用であるため、

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のサブタイプを受け入れる。

関連する問題