2013-02-10 1 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

+2

В Java 7 нет ничего нового, что нам ** нужно **, только вещи, которые могут сделать код более простым. –

+0

Я думаю, что: "HashMap.getInstance();" будет проще, чем «новый HashMap <>();" И может быть там с Java 5. – balent

ответ

5

в то время как вы кор Rect, что можно использовать общий фабричный метод, чтобы избежать повторения параметров типа при создании общих объектов, этот подход имеет несколько недостатков:

  • Вам нужно написать фабричный метод для каждого конструктора каждого универсального класса, дублируя его списки аргументов и документацию параметров.
  • С конструктором ясно, что создается новый объект. С помощью методов эти знания должны сообщаться неформально.
  • Абонентам необходимо знать, где найти заводской метод. В частности, если он не является частью экземпляра генерического класса, разные люди могут поместить их в разные классы полезности, что еще больше увеличивает дублирование кода ...
+0

Кстати, вызов конструктора по умолчанию с отражением гораздо проще, чем вызов статического метода при работе с множеством типов. –

Смежные вопросы