Верхняя граница в Java
Параметр типа T сам по себе не говорит,
какие операции разрешены над значением. Верхняя
граница записывается после ключевого слова
extends: T extends Имя означает,
что под T допустим только тип, который
реализует этот интерфейс или наследует класс.
Метод максимума из двух значений опирается
на сравнение через Comparable:
class MathUtil {
static <T extends Comparable<T>> T maxOf(T a, T b) {
return a.compareTo(b) >= 0 ? a : b;
}
}
void demo() {
System.out.println(MathUtil.maxOf(3, 7));
System.out.println(MathUtil.maxOf("beta", "alpha"));
}
Внутри тела доступен метод compareTo для
типа T, потому что граница гарантирует
поддержку Comparable. Без extends
такой вызов компилятор отклонил бы:
class Order {
static <T extends Comparable<T>> boolean isOrdered(List<T> values) {
for (int index = 1; index < values.size(); index++) {
if (values.get(index - 1).compareTo(values.get(index)) > 0) {
return false;
}
}
return true;
}
}
void demo() {
System.out.println(Order.isOrdered(List.of(1, 2, 3)));
System.out.println(Order.isOrdered(List.of("a", "c", "b")));
}
Объявите метод, который возвращает меньшее
из двух значений с границей Comparable.
Сравните 15 и 8 и выведите
результат.
Дан список строк:
var strings = List.of("aa", "bb", "cc");
Сделайте метод, который проверяет, отсортирован ли список по возрастанию. Проверьте этот список и выведите ответ.