8

エラー:

The method add(capture#1-of ?) in the type List<capture#1-of ?> is not 
applicable for the arguments (String)

コード:

List<?> to = new ArrayList<Object>();
to.add(new String("here"));

はジェネリック型 List であるためList<?>、任意の型にすることができるのに、add メソッドで String を受け入れないのはなぜですか?

4

5 に答える 5

14

AList<?>は未知のタイプのリストです。したがって、リストの型安全性を壊すことなく null 以外を追加することはできません。

List<Integer> intList = new ArrayList<>();
List<?> unknownTypeList = intList;
unknownTypeList.add("hello"); // doesn't compile, now you should see why
于 2013-09-05T10:05:51.263 に答える
6

文字列は受け入れられませんか?

いいえ<?>。型が不明であることを意味し、コンパイラーは、追加できる型が受け入れられるかどうかを確認できません (これには String が含まれます)。

于 2013-09-05T10:06:07.597 に答える
1

ジェネリック型ではなくワイルドカードによると、コンパイラはあなたのケースでは受け入れられない型であるためです。the question mark (?), called the wildcard, represents an unknown typeunknownString

于 2013-09-05T10:16:31.827 に答える
0

ワイルドカードを使用して定義されたリストはすべて読み取り専用と見なすことができます。それでも、実行できる読み取り以外の操作がいくつかあります。

ドキュメントから:

  • null を追加できます。
  • クリアを呼び出すことができます。
  • イテレータを取得して remove を呼び出すことができます。
  • ワイルドカードをキャプチャして、リストから読み取った要素を書き込むことができます。
于 2013-09-05T10:12:01.663 に答える