Насколько я знаю, дженерики полезны только во время компиляции.
Таким образом можно объявить:
private Set set = new HashSet<String>();
И затем, в этой строке hashset, добавить собак или что-нибудь к этому набору, без каких-либо проблем, поскольку нет никаких проверок во время выполнения, как для массивов (ArrayStoreException ...) (но у вас могут быть проблемы, такие как classcast, когда вы используете этот набор ...
Итак, я хочу сказать, что мы обычно создаем экземпляры родовых коллекций таким образом:
Set<String> set = new HashSet<String>();
У меня вопрос: почему мы ставим тип HashSet, так как действительно важен только тип ссылки на переменную (я думаю).
Я имею в виду, мы могли бы просто написать:
Set<String> set = new HashSet();
И это будет работать точно так же, верно?
Итак, почему мы обычно пишем тип во время создания экземпляра? (это не обязательно)
Редактировать
Я знаю о "операторе алмаза" для вывода типа, но зачем нам это вообще нужно !!! так как вывод типа уже работает!
следующий код:
Set<String> set = new HashSet();
set.add("Test add a string 1");
set.add("Test add a string 2");
for ( String s : set ) {
System.out.println(s);
}
Производит вывод:
Тест добавить строку 1
Тест добавить строку 2
Проверь это сам
http://ideone.com/vuiCE
Итак, теперь вы говорите о выводе типов как функции Java7, но он уже работает для меня ...
с java7 мне придется заменить мой
Set<String> set = new HashSet();
К
Set<String> set = new HashSet<>();
Это все еще 2 дополнительных символа для того же, нет? (Если дженерики не только время компиляции с Java7? Я не знаю)