3

I Java 6 次のように配列リストを宣言できます

Way1:ジェネリックを使用する、つまり<Integer> 右側にも

List<Integer> p = new ArrayList<Integer>();

Way2: ダイヤモンド演算子を使用する

List<Integer> p = new ArrayList<>();

Way3: 左側のみジェネリックを使用

List<Integer> p = new ArrayList(); 

私は簡単に方法 3 を使用することを好みます。これらの方法に違いはありますか?どちらを優先すべきで、その理由は?

更新:- Java 7 では 2 番目の方法が推奨されることはわかっていますが、私の質問は Java 6 のコンテキストにあります。どちらが望ましいですか?

私にとって、方法3は、pが整数の配列リストであることも示しています(方法1で伝えられるのと同じです)。したがって、IDE が警告メッセージを表示するという事実を除いて、違いはありません。

ArrayList は生の型です。ジェネリック型への参照ArrayList<E>はパラメーター化する必要があります

4

7 に答える 7

1

There is no difference, if you are using java 7 prefer the second method, but is it not available in java 6. It is a new addition to java 7.

于 2013-06-28T05:38:42.693 に答える
0

方法 3 は生の型を使用します。生の型は絶対に使用しないでください。これらはレガシー コードでのみ使用する必要があります。

于 2013-06-29T00:25:45.367 に答える
0

どちらも同じですが、どちらもバージョン違いがあります。

しかし、Java 6 では 2 番目の方法は使用できません。Java 7 では、右側で型を宣言しないと、デフォルトで左側と同じ型になります。

http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-in​​ference-generic-instance-creation.html

あなたの更新によると、Java 6 を使用する必要がある場合は、way1 を使用する必要があります。

于 2013-06-28T05:57:41.477 に答える
0

方法3は良くありません。ジェネリックと生の型を混在させるのは、型に関する実行時の仮定を行っているため、いたずらであり、次のコードのように ClassCastExceptions が発生する可能性があります。

ArrayList b = new ArrayList();
b.add(5);
ArrayList<String> a = new ArrayList(b);
System.out.println(a.get(0));

したがって、Java 6 の場合は、常に方法 1 を使用します

于 2015-01-21T02:12:33.007 に答える