2017-11-21 4 views
1

この質問は、実装上のインターフェースとしてリストを初期化する理由ではありません。オブジェクト型なしのarraylistの初期化 - JAVA

List<myObject> obj = new ArrayList<myObject>(); 

質問は次の2つの違いは何ですか?また、(明らかに)同じように機能するのはなぜですか?

+0

どちらも同じです。ダイヤモンド演算子はJava 7でショートカットとして導入されたので、プログラマとして自分自身を不必要に繰り返す必要はありません。https://docs.oracle.com/javase/7/docs/technotes/guides/language/type- inference-generic-instance-creation.html –

答えて

1

コードの両方の部分が同等であり、タイプ(あなたの例でmyObject)でArrayList Sを作成する:第二の例では、導入ダイヤモンドオペレータ<>)を使用しかし

List<myObject> obj = new ArrayList<myObject>(); 
List<myObject> obj = new ArrayList<>(); 

型推論を追加し、代入の冗長性を減らします。

あなたは型パラメータの空のセット(<>)とジェネリッククラスのコンストラクタ を呼び出すために必要な型引数を置き換えることができます限り :


documentationから以下の引用文を参照してください。コンパイラはコンテキストから型引数を推論することができるためです。この アングルブラケットのペアは、非公式にダイヤモンドと呼ばれています。例えば

は、次の変数の宣言を検討:

Map<String, List<String>> myMap = new HashMap<>(); 
:Java SEの7では

Map<String, List<String>> myMap = new HashMap<String, List<String>>(); 

を、あなたは型パラメータ(<>)の空のセットで コンストラクタのパラメータ化された型に置き換えることができます

1

2番目の例では、JavaはタイプがmyObjectであるとみなします。だからまだタイプがあります。

関連する問題