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

Object expression в Kotlin

Object expression - выражение, которое сразу создаёт объект. Ему не задают отдельное имя типа на уровне файла: результат можно сохранить в переменную или передать дальше.

Если нужно изменить поведение существующего класса, указывают базовый тип после двоеточия и переопределяют методы. Базовый класс должен быть open, иначе переопределить метод нельзя - это правило наследования из раздела про open class:

open class Formatter { open fun format(value: Int): String = "num:$value" } fun main() { val hex: Formatter = object : Formatter() { override fun format(value: Int): String = "0x${value.toString(16)}" } println(hex.format(255)) }

Тип переменной здесь Formatter - снаружи виден базовый класс, внутри работает переопределённая логика. Такой объект живёт, пока на него есть ссылка; это не singleton уровня object Name.

Object expression можно создавать и внутри функции - для одноразового поведения в одном месте вызова:

open class Tag { open fun label(): String = "raw" } fun buildTag(): Tag = object : Tag() { override fun label(): String = "custom" } fun main() { println(buildTag().label()) }

Именованный object объявляют один раз на модуль; object expression пишут там, где нужен единственный особый экземпляр без нового имени типа в проекте.

Сделайте open class Greeter с методом message(): String, возвращающим "hello". Сохраните в g object expression, переопределив message() так, чтобы он возвращал "hi". Выведите g.message().

Сделайте open class Doubler с open fun transform(n: Int): Int = n. Передайте в функцию run(d: Doubler, x: Int) object expression, в котором transform удваивает число. Выведите результат run(..., 5).

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