4

以下のコードは、コンパイル時エラーを引き起こします。

List 型のメソッド add(capture#1-of ? extends Object) は、引数 (文字列) には適用されません。

コード:

List<? extends Object> a1 = new ArrayList();
a1.add("string");

エラーは次の行にあります:

a1.add("string");

クラス String は Object から拡張されるため、ref a1 が String 型を受け入れないのはなぜですか?

4

3 に答える 3

4

? extends ObjectX「拡張する未知の型」を意味しObjectます。コレクションにを追加しようとすると、String本質的に を主張しX = Stringていることになり、コンパイラはこれを検証できません。コンパイラが知る限り、まったく異なるものXである可能性もあります。Integer

言い換えれば、「拡張するものは何でも行く」List<? extends Object>という意味ではありません。Objectという単純なList<Object>意味です。

于 2013-04-27T12:09:54.657 に答える