List<?>
が知られていないタイプのリストである、我々はこのリスト内のどのタイプを知らない、ジェネリックは削除実行時の型キャストの例外のために導入され、安全性を与えました。あなたはそれを壊すので、未定義のcontainsを持つコレクションに型を追加することはできません。例これは、許可される場合:
List<Dog> dogs = new ArrayList<>(Arrays.asList(new Dog("dog")));
public doSomething(List<?> notKnownType) {
notKnownType.add(new Cat("cat"));
// if this ok or not? <?> is not known type, all types have Object as parent let's add Cat
}
for (Dog dog : dogs) {
System.out.println(dog); //ClassCastException
}
ClassCastExceptin私たちは犬に猫を追加し、猫にすべての犬を投げ、ランタイムジェネリックに とすべてのコレクションを存在しないとなどためのオブジェクトが含まれています。 は、この行は、コンパイル後にそのようなことになります。これは、あなたが何かを知られないようにするタイプのコレクションを追加し、タイムエラーをコンパイル取得することができないことはできませ用
for (Object dog : dogs) {
System.out.println((Dog) dog); //ClassCastExceptin
}
ここlist.set(i, tmp.get(list.size()-i-1)); // compile-time error , why ?
'一覧>は' _unbounded_ワイルドカード。つまり、リストには 'null'しか挿入できません。 –
https://docs.oracle.com/javase/tutorial/java/generics/unboundedWildcards.html –
あなたは「?」を誤解しています。それは置き換えられません。 *未知数*を識別します。 – Andreas