为什么我们需要Java 7中的菱形运算符?

时间:2013-02-10 17:37:16

标签: java java-7

我很好奇为什么我们需要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>();
    }
}

1 个答案:

答案 0 :(得分:5)

虽然你是正确的,可以使用通用工厂方法来避免在创建通用对象时重复类型参数,但这种方法有一些缺点:

  • 您需要为每个泛型类的每个构造函数编写一个工厂方法,复制其参数列表和参数文档。
  • 使用构造函数,很明显正在创建一个新对象。通过方法,必须非正式地传达这些知识。
  • 来电者需要知道在哪里找到工厂方法。特别是,如果它不是被实例化的泛型类的一部分,不同的人可能会将它们放在不同的实用程序类中,从而进一步增加代码重复...