たとえば、する代わりに
ArrayList<ClassName> variableName;
あなたがやる
ArrayList variableName;
その後、「ClassName」タイプのオブジェクトを追加します
variableName.add(objectName);
配列のタイプを自動的に次のように設定します
ArrayList<ClassName>
?
いいえ。ジェネリックはコンパイル時のみです。あなたはそのチェックの恩恵を失っているだけです。実行時にすべての一般情報が消去されます
言い換えると、
ArrayList<Type>
実行時は単なるArrayListです。リストだけでそれを行うことの利点は、コードを書いているときに、コンパイラがリストに不適切なものを入れていないことを確認することです。
指定しない場合は、ArrayList <Object>を指定した場合と同じになります。つまり、任意のタイプのオブジェクトをArrayListに追加できます。クラスを指定するときに実行される型チェックは、実行時ではなくコンパイル時に行われるため、提案どおりに機能することはできません(より具体的なクラスが実行時に決定されます)。
実際のタイプは実際にはArrayList
です。 ArrayList<ClassName>
型はコンパイラーにのみ存在し(これは消去と呼ばれます)、その目的はコンパイラーレベルで型の安全性を提供することです。しかし、バイトコードレベルでは、ジェネリック型についての知識はありません。