web-dev-qa-db-ja.com

タイプMap <String、capture#1-ofのメソッド?拡張Object>は適用されません

インターフェースのために次のJavaメソッドを実装しています:

public String importDocument(ImportSource source, Map<String, ? extends Object> paramMap);

フォローしようとすると、コンパイルの警告が表示されます。スニペット:

paramMap.put("Key", "Value");

エラー:

タイプMapのメソッドput(String、capture#1-of?extends Object)は、引数(String、String)には適用されません

どうして?

20
Emaborsa
_? extends Object
_

汎用ワイルドカードを使用しています。クラスタイプが決定的ではないため、追加操作を実行できません。何も追加/配置できません(nullを除く)。

ワイルドカードの使用の詳細については、Oracle docs を参照してください。

_Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error
_

Cの要素タイプが何を表しているのかわからないため、オブジェクトを追加することはできません。 add()メソッドは、コレクションの要素タイプである_type E_の引数を取ります。実際の型パラメーターが_?_の場合、一部の_unknown type_を表します。追加するために渡すパラメーターは、この未知のタイプのサブタイプでなければなりません。どんな型なのかわからないので、何も渡すことはできません。_The sole exception is null, which is a member of every type_。

22
Aniket Thakur