0

私を混乱させるコード:

 Collection<? extends Map<String, String>> a = 
                       new ArrayList<SortedMap<String, String>>();
 SortedMap<String, String> b = new TreeMap<String, String>();
 b.put("1","a");

エラー:

 a.add(b);

Collection> 型のメソッド add(capture#2-of ? extends Map) が引数 (SortedMap) に適用されないのはなぜですか? SortedMap は Map を拡張し、TreeMap は SortedMap を実装するクラスです。

4

1 に答える 1

3

これの意味は

 Collection<? extends Map<String, String>> a ;

の要素は、Map を拡張aする未知のクラスです。つまり、値を取得するときはマップですが、コレクションに追加するのにどのマップが有効かはわかりません。

たとえば、aMap を拡張するクラスがわからないため、どれが有効かがわからないため、サブクラスを許可できません。

List<HashMap<String, String>> listOfMap = new ArrayList<>();
Collection<? extends Map<String, String>> a = listOfMap;
SortedMap<String, String> b = new TreeMap<String, String>();
b.put("1", "a");
a.add(b); // produces an error  as it should.

に変われa

Collection<SortedMap<String, String>> a = new ArrayList<SortedMap<String, String>>();

bこのタイプなので追加しても大丈夫です。

于 2013-09-20T10:21:50.717 に答える