3

正常にコンパイルされ、実行されます。

List a=new ArrayList<String>();
a.add(new Integer(5));

誰でもこれを説明できますか?

4

6 に答える 6

1

これは、古いレガシ コードでは、(プリミティブを除く) あらゆるものをコレクションに入れることが許可されていたためです。また、レガシー コードをサポートするために、Java 5 および Java 6 では、新しいタイプ セーフ コードで古いコードを利用できるようになっています。

そのため、Java 5 または Java 6 コンパイラーは、型安全でない引数を取り、誰が何を実行するかを知っている古いクラスのメソッドをコードが呼び出す場合でも、新しい型安全なコードをコンパイルさせなければなりません。

実際、コンパイラは警告を出します。コンパイラは、コンパイルから完全に有効なクラス ファイルを生成しましたが、親切にも、非常に多くの言葉で、「この古いコードが原因で、自分が何をしているのか知っていることを願っています」と言ってくれました。. _ <String>_ArrayList<String>

于 2013-07-30T09:56:46.977 に答える
1

やったほうがいい

List<String> a = new ArrayList<String>();
a.add(new Integer(5));
  • StringList は、オブジェクトのみがコレクションに追加されているかどうかをコンパイラがチェックすることを意味します。

誰でもこれを説明できますか?

これが可能な理由は

  • 型消去のため、実行時の型安全性はありません
  • このステートメントList a は、どのオブジェクトがリストに追加されているかをコンパイル時にチェックしないことを意味します。

List<String> a = new ArrayList<String>()Java 7 の時点では、タイプ セーフのために記述する必要はありません。単にダイヤモンド演算子を使用して、同じことを達成することができますList<String> a = new ArrayList();

于 2013-07-30T09:41:37.673 に答える
1

実際の定義でジェネリック型を指定していません

あなたが書いた場合

List<String> a = new ArrayList<String>();
a.add(new Integer(5));

コンパイルされません。

于 2013-07-30T09:39:39.437 に答える