С Эффективное Java Глава 5 (генерики):Тип против неограниченного шаблона
// Two possible declarations for the swap method public static <E> void swap(List<E> list, int i, int j); public static void swap(List<?> list, int i, int j);
Какой из этих двух деклараций является предпочтительным, и почему? В публичном API второй лучше, потому что он проще. Вы переходите в список - любой список - и метод свопирует индексированные элементы. Невозможно беспокоиться о параметре типа. Как правило, если параметр типа появляется только один раз в объявлении метода, замените его на шаблон.
Я не понимаю, почему второй вариант проще для клиента моего API? Я могу передать те же параметры первому и второму методам. Кроме того, второй требует вспомогательного метода для подстановочного подбора. Может ли кто-нибудь объяснить, почему второй рекомендуется? Спасибо!
Возможные ответы: http://stackoverflow.com/questions/6231973/difference-between-list-list-listt-liste-and-listobject?rq=1 –