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

Несколько границ в Kotlin

Иногда одного ограничения T : SomeType недостаточно: тип должен одновременно поддерживать два интерфейса. Дополнительные границы перечисляют в блоке where после сигнатуры функции или класса.

Копирование в изменяемый список требует и сравнимости элементов, и возможности клонировать значение через интерфейс:

interface Copyable<T> { fun copy(): T } fun <T> duplicateAll(source: List<T>, target: MutableList<T>) where T : Comparable<T>, T : Copyable<T> { for (item in source.sorted()) { target.add(item.copy()) } }

Обе строки в where должны выполняться для конкретного T. Внутри функции можно и сортировать, и вызывать copy:

data class Score(val points: Int) : Comparable<Score>, Copyable<Score> { override fun compareTo(other: Score): Int { return points.compareTo(other.points) } override fun copy(): Score = Score(points) } fun main() { val src = listOf(Score(30), Score(10), Score(20)) val dst = mutableListOf<Score>() duplicateAll(src, dst) println(dst.map { it.points }) }

Объявите интерфейс с методом без аргументов, который возвращает строковую метку. Сделайте функцию, которая принимает список элементов, сортирует его и выводит метки через запятую. Используйте Comparable и ваш интерфейс в where.

Для трех чисел 5, 1, 3 оберните их в тип, который реализует обе границы из примера урока, скопируйте в новый список через функцию урока и выведите очки по порядку.

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