Почему бы не установить <String>set = new HashSet () вместо Set <String>set = new HashSet <String>()? - PullRequest
0 голосов
/ 22 мая 2018

Куда бы я ни посмотрел, я вижу, что набор Коллекций выполняется следующим образом:

Set<String> set = new HashSet<String>();

Однако я определяю мои Коллекции следующим образом

Set<String> set = new HashSet();

и я все еще получаю проверку типов (и мой способ выглядит чище).

Может быть, это как-то связано с созданием универсальных коллекций?Но, скажем, я просто не хочу ничего, кроме HashSet of Strings, тогда не достаточно

Set<String> set = new HashSet();

?

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

В этом конкретном случае использования, когда вы не передаете аргумент конструктору, это не имеет значения.

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

Этот неправильный код компилируется из-за необработанного типа и вызывает загрязнение кучи:

List<Integer> foo = Arrays.asList(1, 2, 3);
Set<String> set = new HashSet(foo);

Принимая во внимание, что использование правильного аргумента типа соответственно предотвращает его компиляцию:

List<Integer> foo = Arrays.asList(1, 2, 3);
Set<String> set = new HashSet<String>(foo);

Кстати, вы можете использовать оператор diamond в Java 7+, если вы не хотите быть настолько многословным:

Set<String> set = new HashSet<>();
0 голосов
/ 22 мая 2018

Вы используете универсальный класс при создании новой коллекции.

Универсальный класс должен получить универсальный тип, который он инкапсулирует, в противном случае он считается Raw Type .

Поэтому правильное объявление значения коллекции должно быть:

Set<String> mySet = new HashSet<>();

Ваша JVM сможет вывести общий тип, используемый в вашем HashSet, благодаря объявлению Set<String>

Большинство IDE (например, Eclipse и ItelliJ) имеют свои линтеры, настроенные на выдачу предупреждения при использовании класса Raw Type.Это предупреждение может быть подавлено, но это считается плохой практикой.

Ссылки:

Бонус:

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