違いは何ですか
public List<?> myList;
と
public List<String> myList;
後者がList
myList オブジェクト (文字列) を格納することはわかっていますが、最初のオブジェクトが何をするのかはわかりませんtype
。
違いは何ですか
public List<?> myList;
と
public List<String> myList;
後者がList
myList オブジェクト (文字列) を格納することはわかっていますが、最初のオブジェクトが何をするのかはわかりませんtype
。
すでに述べたように、2 番目には文字列のリストが含まれます。最初に不明なオブジェクトのリストが含まれており、それらを使用する前に適切なオブジェクトに明示的にキャストする必要があります。ワイルドカードを継承などで使用する場合、ワイルドカードには他の利点があります。JavaList<? extends ABC>
ドキュメントのワイルドカードセクションを確認する必要があります。
これを理解するための簡単なチュートリアルがありますhttp://tutorials.jenkov.com/java-generics/wildcards.html
List<String>
はParameterized Type
String 型のオブジェクトのみを含むことができる List を表しますが、
List<?>
不明なタイプのオブジェクトのみを含むことができる ListをUnbounded Wildcard Type
表す です。
有効な Javaに従って、どちらも安全に使用できますが、実行時に例外が発生する可能List
性Raw Type
があり、ジェネリックの導入前に記述されたレガシー コードとの互換性と相互運用性のためにのみ提供されています。
はい、安全ではありません。そのため、パラメーターとして使用するときに追加することはできません。そこから読み取ることしかできません。
List<?>
未知の型に型付けされたリストを意味します。これは、List<A>, a List<B>, a List<String>
などである可能性があります。
List がどの型に型付けされているかわからないため、コレクションから読み取ることしかできず、読み取ったオブジェクトを Object インスタンスとして扱うことしかできません。
public void processElements(List<?> elements){
for(Object o : elements){
System.out.println(o);
}
}
この方法では、「要素」に物を追加することはできません。要素のタイプがわからないため、読み取りのみを行います。