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 回答