0

違いは何ですか

public List<?> myList;

public List<String> myList;

後者がListmyList オブジェクト (文字列) を格納することはわかっていますが、最初のオブジェクトが何をするのかはわかりませんtype

4

3 に答える 3

1

すでに述べたように、2 番目には文字列のリストが含まれます。最初に不明なオブジェクトのリストが含まれており、それらを使用する前に適切なオブジェクトに明示的にキャストする必要があります。ワイルドカードを継承などで使用する場合、ワイルドカードには他の利点があります。JavaList<? extends ABC>ドキュメントのワイルドカードセクションを確認する必要があります。

これを理解するための簡単なチュートリアルがありますhttp://tutorials.jenkov.com/java-generics/wildcards.html

于 2014-01-27T00:23:43.533 に答える
1

List<String>Parameterized TypeString 型のオブジェクトのみを含むことができる List を表しますが、

List<?>不明なタイプのオブジェクトのみを含むことができる ListをUnbounded Wildcard Type表す です。

有効な Javaに従って、どちらも安全に使用できますが、実行時に例外が発生する可能ListRaw Typeがあり、ジェネリックの導入前に記述されたレガシー コードとの互換性と相互運用性のためにのみ提供されています。

于 2014-01-27T00:41:39.607 に答える
1

はい、安全ではありません。そのため、パラメーターとして使用するときに追加することはできません。そこから読み取ることしかできません。

List<?>未知の型に型付けされたリストを意味します。これは、List<A>, a List<B>, a List<String>などである可能性があります。

List がどの型に型付けされているかわからないため、コレクションから読み取ることしかできず、読み取ったオブジェクトを Object インスタンスとして扱うことしかできません。

public void processElements(List<?> elements){
   for(Object o : elements){
      System.out.println(o);
   }
}

この方法では、「要素」に物を追加することはできません。要素のタイプがわからないため、読み取りのみを行います。

于 2014-01-27T00:31:00.033 に答える