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

Чтение с верхней границей в Java

Подстановочный тип можно сузить сверху. Запись ? extends Имя означает: элементы неизвестны точно, но каждый из них - подтип указанного имени. Такой список удобен для чтения и обхода.

Открытый класс животного и два наследника понадобятся для примера:

class Animal { private final String name; Animal(String name) { this.name = name; } String getName() { return name; } } class Dog extends Animal { Dog(String name) { super(name); } } class Cat extends Animal { Cat(String name) { super(name); } } class Names { static void printNames(List<? extends Animal> pets) { for (Animal pet : pets) { System.out.println(pet.getName()); } } } void demo() { List<Dog> dogs = List.of(new Dog("rex")); Names.printNames(dogs); }

Список собак подходит там, где ждут List<? extends Animal>: из него только читают общие поля и методы базового типа. Добавить новую собаку в параметр с такой границей нельзя - компилятор не знает точный тип списка:

class Sum { static double sumNumbers(List<? extends Number> row) { double total = 0; for (Number value : row) { total += value.doubleValue(); } return total; } } void demo() { System.out.println(Sum.sumNumbers(List.of(1, 2.5, 3))); }

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

Объявите метод, который считает сумму чисел в списке с границей ? extends Number. Проверьте на 1, 2, 3 и выведите результат.

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