HashMap<Character, Integer> alphabet1 = new HashMap(); // (1)
(1) инициализирует HashMap
без использования дженерик, но использует небезопасное приведение к HashMap
с воспроизведенными впоследствии. Это должно вызвать предупреждение компилятора.
HashMap<Character, Integer> alphabet1 = new HashMap<Character, Integer>(); // (2)
(2) инициализация HashMap
с воспроизведенными и объявляет переменную типа HashMap
с воспроизведенными. Это может быть обсчитывается в
HashMap<Character, Integer> alphabet1 = new HashMap<>(); // (2b)
Здесь компилятор использует тип вывода для вывода о genrics на HashMap
от декларации с левой стороны.
HashMap alphabet1 = new HashMap<Character, Integer>(); // (3)
(3) Initialzes в HashMap с дженериков, но переменная alphabet1
не использует повторно информацию дженериков. Таким образом, вы не можете получить доступ к методам этого значения HashMap
в общем виде (например, вы получите значение, отличное от java.lang.Object
при вызове alphabet1.get('a')
и не переданное на Integer
).
Map alphabet1 = new HashMap<Character, Integer>(); // (4)
(4) аналогично (3), но здесь, то alphabet1
набирается Map
вместо HashMap
. Таким образом, вы не можете получить доступ к методам, определенным в HashMap
, но не в его супер интерфейсе Map
.
HashMap alphabet1 = new HashMap(); // (5)
(5) аналогично (3), он не использует воспроизведенные для инициализации HashMap
.
Map alphabet1 = new HashMap(); // (6)
(6) аналогично (4) и не использует универсальные шаблоны для инициализации HashMap
.
Пройдись от дженериков http://docs.oracle.com/javase/tutorial/java/generics/, вы автоматически поймете все это. –
Все эти варианты, и он по-прежнему не включает тот, который я обычно использовал: 'Map alphabet1 = new HashMap ();'. [Я все еще использую Java 5] –
splungebob
И с Java 7 (см. Http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html) вы можете написать: «Карта <Символ, Целое>> alphabet1 = new HashMap <>();' – splungebob