Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: (Обновленные) Обобщения
Раздел: Подстановочные знаки
Неограниченные Подстановочные знаки
Домашняя страница > Изучение Языка Java > (Обновленные) обобщения

Неограниченные Подстановочные знаки

Неограниченный подстановочный тип определяется, используя подстановочный символ (?), например, List<?>. Это вызывают списком неизвестного типа. Есть два сценария, где неограниченный подстановочный знак является полезным подходом:

Рассмотрите следующий метод, printList:

public static void printList(List<Object> list) {
    for (Object elem : list)
        System.out.println(elem + " ");
    System.out.println();
}

Цель printList состоит в том, чтобы напечатать список любого типа, но это не в состоянии достигнуть той цели — это печатает только список экземпляров Object; это не может напечатать List<Integer>, List<String>, List<Double>, и так далее, потому что они не подтипы List<Object>. Чтобы записать универсальный метод printList, используйте List<?>:

public static void printList(List<?> list) {
    for (Object elem: list)
        System.out.print(elem + " ");
    System.out.println();
}

Поскольку для любого конкретного типа A, List<A> является подтипом List<?>, можно использовать printList, чтобы напечатать список любого типа:

List<Integer> li = Arrays.asList(1, 2, 3);
List<String>  ls = Arrays.asList("one", "two", "three");
printList(li);
printList(ls);

Отметьте: метод Arrays.asList используется в примерах всюду по этому уроку. Этот статический метод фабрики преобразовывает указанный массив и возвращает список фиксированного размера.

Важно отметить, что List<Object> и List<?> не являются тем же самым. Можно вставить Object, или любой подтип Object, в List<Object>. Но можно только вставить null в List<?>. У Направляющих линий для Подстановочного раздела Использования есть больше информации о том, как определить, какой подстановочный знак, если таковые вообще имеются, должен использоваться в данной ситуации.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Верхние Ограниченные Подстановочные знаки
Следующая страница: Ниже Ограниченные Подстановочные знаки