web-dev-qa-db-ja.com

オブジェクトタイプを指定せずにArrayListを作成すると、最初のオブジェクトを追加したときに自動的に作成されますか?

たとえば、する代わりに

ArrayList<ClassName> variableName;

あなたがやる

ArrayList variableName;

その後、「ClassName」タイプのオブジェクトを追加します

variableName.add(objectName);

配列のタイプを自動的に次のように設定します

ArrayList<ClassName>

22
trusktr

いいえ。ジェネリックはコンパイル時のみです。あなたはそのチェックの恩恵を失っているだけです。実行時にすべての一般情報が消去されます

言い換えると、

ArrayList<Type> 

実行時は単なるArrayListです。リストだけでそれを行うことの利点は、コードを書いているときに、コンパイラがリストに不適切なものを入れていないことを確認することです。

38
hvgotcodes

指定しない場合は、ArrayList <Object>を指定した場合と同じになります。つまり、任意のタイプのオブジェクトをArrayListに追加できます。クラスを指定するときに実行される型チェックは、実行時ではなくコンパイル時に行われるため、提案どおりに機能することはできません(より具体的なクラスが実行時に決定されます)。

14
stew

実際のタイプは実際にはArrayListです。 ArrayList<ClassName>型はコンパイラーにのみ存在し(これは消去と呼ばれます)、その目的はコンパイラーレベルで型の安全性を提供することです。しかし、バイトコードレベルでは、ジェネリック型についての知識はありません。

8
ninjalj