この質問は、実装上のインターフェースとしてリストを初期化する理由ではありません。オブジェクト型なしのarraylistの初期化 - JAVA
List<myObject> obj = new ArrayList<myObject>();
質問は次の2つの違いは何ですか?また、(明らかに)同じように機能するのはなぜですか?
この質問は、実装上のインターフェースとしてリストを初期化する理由ではありません。オブジェクト型なしのarraylistの初期化 - JAVA
List<myObject> obj = new ArrayList<myObject>();
質問は次の2つの違いは何ですか?また、(明らかに)同じように機能するのはなぜですか?
コードの両方の部分が同等であり、タイプ(あなたの例でmyObject
)でArrayList
Sを作成する:第二の例では、導入ダイヤモンドオペレータ(<>
)を使用しかし
List<myObject> obj = new ArrayList<myObject>();
List<myObject> obj = new ArrayList<>();
型推論を追加し、代入の冗長性を減らします。
あなたは型パラメータの空のセット(
<>
)とジェネリッククラスのコンストラクタ を呼び出すために必要な型引数を置き換えることができます限り :
はdocumentationから以下の引用文を参照してください。コンパイラはコンテキストから型引数を推論することができるためです。この アングルブラケットのペアは、非公式にダイヤモンドと呼ばれています。例えば
は、次の変数の宣言を検討:
:Java SEの7ではMap<String, List<String>> myMap = new HashMap<>();
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
を、あなたは型パラメータ(
<>
)の空のセットで コンストラクタのパラメータ化された型に置き換えることができます
2番目の例では、JavaはタイプがmyObjectであるとみなします。だからまだタイプがあります。
どちらも同じです。ダイヤモンド演算子はJava 7でショートカットとして導入されたので、プログラマとして自分自身を不必要に繰り返す必要はありません。https://docs.oracle.com/javase/7/docs/technotes/guides/language/type- inference-generic-instance-creation.html –