10

次のコードは、Eclipse で Java 仕様 1.7 を使用してコンパイルすると機能しますが、1.6 では機能しません。

HashMap<String, String> hashMap = new HashMap<>();

説明が欲しいのですが、この構文と 1.7 で機能する理由です。

4

5 に答える 5

21

(new HashMap<>()ダイヤモンド構文と呼ばれる) は、Java SE 7 でのみ導入されたため、JDK 1.6 では許可されていません。

Java SE 7 のテクノロジー変更点のハイライトで汎用インスタンス作成の型推論を探してください。

説明が欲しいのですが、この構文と 1.7 で機能する理由です。

これは、 Oracle自体からの説明です(わずかに調整されています):

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

class MyClass<X> {
  <T> MyClass(T t) {
    // ...
  }
}

 

MyClass<Integer> myObject = new MyClass<>("");

この例では、コンパイラはジェネリック クラスの仮型パラメータの型を推測します。このジェネリック クラスのコンストラクターの仮型パラメーターの型を推測します。IntegerXMyClass<X>StringT

于 2013-05-17T14:59:13.310 に答える
14

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

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

Java SE 6 では、次のようにする必要がありました。

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

詳細...

于 2013-05-17T14:59:38.917 に答える
4

これは JDK 1.7 (Diamond オペレーター) の機能拡張であるため、クラスとコンストラクターでジェネリック型を指定する前にHashMap<String, String> hashMap = new HashMap<String, String>();

于 2013-05-17T14:59:37.603 に答える
2

1.7で導入されたダイヤモンド演算子を使用しています。

于 2013-05-17T14:59:21.583 に答える
1

JDK 1.7 で使用したものと同じ構文を JDK 1.6 で使用することはできません。

于 2013-05-17T15:00:57.033 に答える