17

ArrayList の次の 2 つの宣言の違いは何ですか?

ArrayList<Integer> nunbers = new ArrayList<Integer>();

ArrayList<Integer> nunbers = new ArrayList<>();

それらのいずれかが他のものよりも優先されますか?

4

5 に答える 5

26

2 つ目は型パラメーターinferredを持ちます。これは Java 7 の新しい機能で、 「ダイヤモンド<>」と呼ばれます。

また、型推論自体は Javaでは新しいものではありませんが、インスタンス化されるジェネリック クラスに対してそれを推論する機能は新しいものであることに注意してください。

Java SE 7 より前のリリースのコンパイラは、ジェネリック メソッドと同様に、ジェネリック コンストラクターの実際の型パラメーターを推論できます。ただし、Java SE 7 以降のコンパイラは、ひし形 (<>) を使用すると、インスタンス化されるジェネリック クラスの実際の型パラメーターを推測できます。

コードがJava 7でのみ実行される必要があることを確認できる限り、2番目の方がおそらく好ましいと思います。これは、より明確であり、冗長な情報を減らすだけだからです。

于 2013-04-26T19:07:50.370 に答える
4

2番目のものはコードの混乱を減らします。これはJava 7の新機能です。しかし、コードは

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

interface にコーディングできるのでList、実装の型 paramArrayListが推論されます。

于 2013-04-26T19:09:47.930 に答える
3

最後の 1 つは、Java バージョン 7 以降で使用できるショートカットです。

于 2013-04-26T19:07:58.693 に答える
3

Java コンパイラのバージョンが 1.7 より劣っている場合、2 番目のものはコンパイルされません。

于 2013-04-26T19:07:08.110 に答える
3

それらはまったく同じコードにコンパイルされます。Java 7 の 2 番目のことは、使用できるショートカットに過ぎないため、<>空のままにしておくことができます。

于 2013-04-26T19:10:15.993 に答える