Я обновляю свои знания о дженериках Java. Поэтому я обратился к превосходному учебнику от Oracle... и начал собирать презентацию для моих коллег. Я наткнулся на раздел на подстановочные знаки в tutorial, в котором говорится:
Рассмотрим следующий метод: printList:
public static void printList(List<Object> list) { ...Цель printList - распечатать список любого типа, но он не достигает этой цели - он печатает только список экземпляров Object; он не может печатать
List<Integer>,List<String>,List<Double>и т.д., потому что они не являются подтипамиList<Object>. Чтобы написать общий метод printList, используйтеList<?>:public static void printList(List<?> list) {
Я понимаю, что List<Object> не будет работать; но я изменил код на
static <E> void printObjects(List<E> list) {
for (E e : list) {
System.out.println(e.toString());
}
}
...
List<Object> objects = Arrays.<Object>asList("1", "two");
printObjects(objects);
List<Integer> integers = Arrays.asList(3, 4);
printObjects(integers);
И угадайте, что; используя List<E> Я могу печатать различные типы списков без каких-либо проблем.
Короче говоря: по крайней мере, в учебном пособии указано, что одному нужен шаблон для решения этой проблемы; но, как показано, это также можно решить таким образом. Итак, что мне не хватает?!
(сторона примечания: протестировано с Java7, так что, возможно, это была проблема с Java5, Java6, но, с другой стороны, Oracle, похоже, хорошо справляется с обновлениями своих учебников)