1

マップを別のマップに入れようとしています。

Map<String, ? extends Map<String, String>> test = new HashMap<String, HashMap<String, String>>();
Map<String, String> temp = new HashMap<String, String>();
test.put("foobar", temp);

しかし、私はこれを受け取ります:

Map> 型のメソッド put(String, capture#1-of ? extends Map) は、引数 (String, Map) には適用されません。

Map<String,String>と同じではありません? extends Map<String,String>か?

4

2 に答える 2

2

外側Map testは値が追加されないようにする上位のワイルドカード値を使用しますが、 は追加しMap tempません。

あなたが使用することができます

Map<String, Map<String, String>> test = new HashMap<String, Map<String, String>>();
            ^                                               ^
            |-----changed LHS type--- must be matched with -|                                               

限定されたワイルドカード構文は、が を拡張する未知の型の値を使用することをMap<String, ? extends Map<String, String>>意味します。コンパイラは、追加される以外のすべての値を防ぎます。MapMapnull

また、ジェネリックは共変ではないため、右側の値には aMapではなく型があることに注意してくださいHashMap。つまり、右側に割り当てられた値のジェネリック型は、左側の宣言の値と正確に一致する必要があります。

于 2013-08-08T19:54:10.807 に答える