0

Java7 でダイヤモンド演算子が必要な理由を知りたいです。コレクション API に追加できる単純な静的ジェネリック メソッドを使用して、この動作をシミュレートできます。

HashMap のメソッドのコード:

public static <R, S> HashMap<R, S> getInstance() {
    return new HashMap<R, S>();
}

そして、次のように使用できます。

Map<String, List<String>> m = HashMap.getInstance();

この動作を試すことができる場合は、次のようにコーディングします。

import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.Arrays;

public class Diamond {
    public static void main(String... args) {
        Map<String, List<String>> m = getInstance();
        m.put("Hello", Arrays.asList("Peter", "Robert"));
        System.out.println(m.toString());
    }
    public static <R, S> HashMap<R, S> getInstance() {
        return new HashMap<R, S>();
    }
}
4

1 に答える 1

5

ジェネリック ファクトリ メソッドを使用して、ジェネリック オブジェクトを作成するときに型パラメーターの繰り返しを回避できることは正しいですが、そのアプローチにはいくつかの欠点があります。

  • すべてのジェネリック クラスのすべてのコンストラクターに対してファクトリ メソッドを記述し、その引数リストとパラメーター ドキュメントを複製する必要があります。
  • コンストラクターを使用すると、新しいオブジェクトが作成されることは明らかです。メソッドを使用して、この知識を非公式に伝達する必要があります。
  • 呼び出し元は、ファクトリ メソッドの場所を知っている必要があります。特に、それがインスタンス化されるジェネリック クラスの一部でない場合、さまざまな人がそれらをさまざまなユーティリティ クラスに配置する可能性が高く、コードの重複がさらに増加し​​ます ...
于 2013-02-10T17:49:53.243 に答える