Введение в обобщения в Kotlin
Списки строк и списки чисел уже описывают как
List<String> и List<Int>. Отдельная
задача - написать одну и ту же логику для разных
типов элемента без копирования кода под каждый
вариант.
Пусть нужен первый элемент списка или пустое значение, если список пуст. Для строк и для чисел алгоритм совпадает, меняется только тип элемента. Здесь помогает параметр типа - имя, которое подставляется вместо конкретного типа:
fun <T> firstOf(list: List<T>): T? {
return if (list.isEmpty()) null else list[0]
}
Буква T в угловых скобках перед именем
функции объявляет параметр типа. В сигнатуре
List<T> и результат T? согласованы
с этим именем - компилятор связывает их при вызове:
fun main() {
val words = listOf("api", "log")
val nums = listOf(10, 20, 30)
println(firstOf(words))
println(firstOf(nums))
}
Для списка строк функция возвращает строку или
null, для списка чисел - число или
null. Одно объявление покрывает оба случая,
потому что T каждый раз выводится из
аргумента.