Выдача значения в Kotlin
Если класс лишь читает значение параметра типа
и никогда не принимает его снаружи в поля или
методы записи, параметр можно объявить с
меткой out. Так помечают роль типа -
источник данных.
Оболочка хранит одно значение и отдает его через свойство без сеттера:
class Holder<out T>(val value: T)
fun printValue(source: Holder<Any>) {
println(source.value)
}
fun main() {
val text = Holder("log")
printValue(text)
}
Класс Holder<String> подходит там, где ждут
Holder<Any>: из оболочки только читают,
поэтому более конкретный тип безопасно
подставляется вместо общего:
fun <T> firstHolder(list: List<Holder<T>>): T? {
return list.firstOrNull()?.value
}
fun main() {
val row: List<Holder<String>> = listOf(
Holder("a"),
Holder("b")
)
println(firstHolder(row))
}
Сделайте класс с параметром типа, помеченным
для выдачи, и одним свойством только для
чтения. Передайте объект со строкой
"zip" в функцию, которая принимает
оболочку с Any, и выведите значение.
Соберите список из двух оболочек с числами
1 и 2. Напишите функцию, которая
возвращает значение из первой оболочки списка,
и выведите результат.