2013-02-10 41 views
0

我很好奇为什么我们需要Java7中的钻石算子?我们可以模拟这种行为有一个简单的静态的通用方法,它可以被添加到集合API:为什么我们需要Java 7中的钻石算子?

方法的代码的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

你不需要它,它只是让你的生活更简单(即你不需要再创建静态方法)... – assylias 2013-02-10 17:37:52

+2

在Java 7中,我们并不需要任何新的**,只有可能使代码更简单的东西。 – 2013-02-10 17:38:33

+0

我认为:“HashMap.getInstance();”会比“new HashMap <>();”更简单并且可以从Java 5开始。 – balent 2013-02-10 17:39:52

回答

5

RECT,人们可以使用一个通用的工厂方法来避免创建通用对象时,重复的类型参数,这种方法有几个缺点:

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

顺便说一下,在处理大量类型时,使用反射调用默认构造函数要比调用静态方法简单得多。 – 2013-02-10 17:55:21

相关问题