-4
JavaのLinkedList<?>
とLinkedList<Object>
には違いがありますか?LinkedList <?>とLinkedListの相違点<Object>
JavaのLinkedList<?>
とLinkedList<Object>
には違いがありますか?LinkedList <?>とLinkedListの相違点<Object>
これは、コンパイルを渡し:
LinkedList<?> list1 = new LinkedList<String>();
これはない:
LinkedList<Object> list2 = new LinkedList<String>();
すなわちLinkedList<?>
変数は、任意のLinkedList<SomeType>
を割り当てることができます。 LinkedList<Object>
変数にはLinkedList<Object>
(または使用することをお勧めしない生のLinkedList
)しか割り当てることができません。 add
次一方
:
LinkedList<?> list1 = new LinkedList<String>();
list1.add("x");
は、コンパイルを通らない、追従して処理が行われます。
LinkedList<Object> list2 = new LinkedList<Object>();
list2.add("x");
は、なぜ私はリスト1に任意の文字列を追加することはできませんか? – karan
ここでの主なポイントは、ジェネリックは_invariant_だと思います。ジェネリック型の安全性を節約するために行われました。それ以外の場合は、次のコードでクラスキャスト例外がスローされることがあります: 'List li = new ArrayList (); リスト ln = li; //違法 ln.add(新規Float(3.1415)); 'だから'? 'はそのような目的のために作成されました。 –
asdasdsdf
@karan 'list1'に汎用LinkedList(' LinkedList '、' LinkedList 'など)を割り当てることができるので、コンパイラはどの要素を安全に追加できるのか分かりません。 –
Eran