Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpGnWc 109 of 322 menu
◀ ▶

Подстановочный тип в Java

Параметр типа в объявлении класса фиксирует один конкретный тип на весь объект. В типе аргумента метода иногда нужна большая свобода: важен сам факт списка, а не то, строки там или числа.

Знак вопроса в угловых скобках обозначает подстановочный тип. Запись List<?> читается как список чего-то, без обещания конкретного элемента:

class Printer { static void printSize(List<?> row) { System.out.println(row.size()); } } void demo() { Printer.printSize(List.of("a", "b")); Printer.printSize(List.of(1, 2, 3)); }

Элемент, прочитанный по индексу, имеет тип Object - общий тип для неизвестного содержимого. Добавление нового значения в такой список через параметр List<?> запрещено: компилятор не знает, какой тип там допустим:

class First { static Object firstLabel(List<?> row) { return row.isEmpty() ? null : row.get(0); } } void demo() { System.out.println(First.firstLabel(List.of("x"))); System.out.println(First.firstLabel(List.of(10))); }

Подстановочный тип не заменяет параметр типа T в объявлении своего класса. Его ставят в сигнатурах, где нужно принять разные конкретизации одного обобщенного типа.

Напишите метод, который выводит размер любого списка с подстановочным типом. Проверьте на списке из трех символов и выведите число.

Сделайте метод, который возвращает первый элемент списка с ? или null для пустого списка. Проверьте на списке чисел 4, 5 и выведите результат.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить