ArrayList の次の 2 つの宣言の違いは何ですか?
ArrayList<Integer> nunbers = new ArrayList<Integer>();
対
ArrayList<Integer> nunbers = new ArrayList<>();
それらのいずれかが他のものよりも優先されますか?
2 つ目は型パラメーターinferredを持ちます。これは Java 7 の新しい機能で、 「ダイヤモンド<>
」と呼ばれます。
また、型推論自体は Javaでは新しいものではありませんが、インスタンス化されるジェネリック クラスに対してそれを推論する機能は新しいものであることに注意してください。
Java SE 7 より前のリリースのコンパイラは、ジェネリック メソッドと同様に、ジェネリック コンストラクターの実際の型パラメーターを推論できます。ただし、Java SE 7 以降のコンパイラは、ひし形 (<>) を使用すると、インスタンス化されるジェネリック クラスの実際の型パラメーターを推測できます。
コードがJava 7でのみ実行される必要があることを確認できる限り、2番目の方がおそらく好ましいと思います。これは、より明確であり、冗長な情報を減らすだけだからです。
2番目のものはコードの混乱を減らします。これはJava 7の新機能です。しかし、コードは
List<Integer> nunbers = new ArrayList<>();
interface にコーディングできるのでList
、実装の型 paramArrayList
が推論されます。
最後の 1 つは、Java バージョン 7 以降で使用できるショートカットです。
Java コンパイラのバージョンが 1.7 より劣っている場合、2 番目のものはコンパイルされません。
それらはまったく同じコードにコンパイルされます。Java 7 の 2 番目のことは、使用できるショートカットに過ぎないため、<>
空のままにしておくことができます。