Верхняя граница в Kotlin
Параметр типа T сам по себе не говорит,
какие операции разрешены над значением. Верхняя
граница записывается после двоеточия: T : Имя
означает, что под T допустим только тип,
который реализует этот интерфейс или наследует
класс.
Функция максимума из двух значений опирается
на сравнение через Comparable:
fun <T : Comparable<T>> maxOf(a: T, b: T): T {
return if (a >= b) a else b
}
fun main() {
println(maxOf(3, 7))
println(maxOf("beta", "alpha"))
}
Внутри тела доступен метод compareTo и
операторы сравнения для типа T, потому
что граница гарантирует поддержку
Comparable. Без двоеточия такой вызов
компилятор бы отклонил:
fun <T : Comparable<T>> isOrdered(values: List<T>): Boolean {
for (index in 1 until values.size) {
if (values[index - 1] > values[index]) {
return false
}
}
return true
}
fun main() {
println(isOrdered(listOf(1, 2, 3)))
println(isOrdered(listOf("a", "c", "b")))
}
Объявите функцию, которая возвращает меньшее
из двух значений с границей Comparable.
Сравните 15 и 8 и выведите
результат.
Сделайте функцию, которая проверяет, отсортирован
ли список по возрастанию. Проверьте список
"aa", "bb", "cc" и выведите ответ.