Java HashMap с или без типа? - PullRequest
7 голосов
/ 14 мая 2011

Если в объявлении HashMap всегда указан тип, например

private HashMap<String, String> test = new HashMap<String, String>();

потому что я вижу много примеров в книгах, где <String, String> опущено, поэтому у нас просто что-то вроде:

private Map test= new HashMap();

Какой из них «правильный»?

Ответы [ 3 ]

10 голосов
/ 14 мая 2011

Это действительно должно выглядеть как

private Map<String, String> test = new HashMap<>();

Так что элементы обоих верны;) Map - это интерфейс, который определяет поведение, а HashMap - это реализация, обеспечивающая поведение.

Если вы хотите более строгую безопасность типов, вам следует использовать общие аргументы.Хотя они не являются строго необходимыми, они приносят большую пользу при уменьшении ошибок приложений.Так как дженерики были введены в Java 5, примеры, приведенные ранее, не будут показывать дженерические аргументы.

«оператор ромба» <> был представлен в Java 7 - это означает, что вы можетеуменьшите второе вхождение спецификатора универсального типа до значения <>.

6 голосов
/ 14 мая 2011

Начиная с Java 5, лучшим вариантом было использование обобщений с скобками <>. Это позволяет вам узнать, какие типы Map использует для ключа и значения, и выполнить некоторые проверки во время компиляции, чтобы предотвратить добавление неправильных типов. Это также позволяет вам не приводить значения к правильному типу, когда вы get выводите их из карты.

Если вы хотите разрешить всем классам ключ и значение, вы можете использовать обобщенное объявление <?, ?>. Но почти всегда лучше быть настолько конкретным, насколько это необходимо, для ваших родовых типов.

Кроме того, можно обойти общие проверки, но они определенно лучше, чем ничего.

1 голос
/ 14 мая 2011

Оба правильные .Обобщения являются частью JDK начиная с версии 5. Другой код, который вы видите, возможно, был написан до 5 или предназначен для обратной совместимости.

Обобщение имеет то преимущество, что дает принудительное применение типов во время компиляции и освобождает вас.от необходимости разыгрывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...