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

Прием значения в Kotlin

Метка in на параметре типа описывает обратную роль: объект принимает значения этого типа, но не отдает их наружу как T. Это не оператор проверки вхождения из цикла и условий - здесь in стоит в объявлении класса.

Накопитель строк принимает текст через метод и хранит его во внутреннем поле общего типа:

class Sink<in T> { private var stored: Any? = null fun accept(value: T) { stored = value } fun describe(): String = stored.toString() } fun fillAny(target: Sink<Any>) { target.accept("note") } fun main() { val anySink = Sink<Any>() fillAny(anySink) println(anySink.describe()) }

Функция, которая работает с Sink<Any>, может получить и более узкий Sink<String>: потребитель готов принять любой объект, а строка - частный случай:

fun feedString(sink: Sink<String>) { sink.accept("api") } fun main() { val wide: Sink<Any> = Sink() feedString(wide) println(wide.describe()) }

Сделайте класс-потребитель с меткой приема на параметре типа и методом для записи значения. Передайте его в функцию, которая ждет потребитель Any, запишите число 42 и выведите текстовое описание сохраненного.

Объявите функцию, которая принимает потребитель строк и записывает в него "ok". Вызовите ее для потребителя с типом Any и выведите результат описания.

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