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

Анонимный object в Kotlin

Object expression не обязан наследовать класс. Запись object { ... } создаёт анонимный объект с методами и свойствами внутри блока:

fun main() { val panel = object { val title = "Settings" fun line(): String = "[$title]" } println(panel.line()) }

Тип такой переменной компилятор выводит сам - это не Any, а уникальный анонимный тип. Поэтому метод line() доступен только через эту переменную, пока область видимости не закончилась.

Анонимный объект удобен, когда нужен маленький набор полей и команд в одном месте, без отдельного файла и без верхнеуровневого object:

fun audit(action: () -> Unit) { val stamp = object { val started = System.currentTimeMillis() fun done(): Long = System.currentTimeMillis() - started } action() println(stamp.done()) } fun main() { audit { Thread.sleep(10) } }

Сравнение трёх форм в одном месте:

object Name один общий экземпляр, имя типа известно везде в модуле
companion object члены привязаны к class, вызов через ClassName
object expression новый объект в точке кода, имя типа не объявляют отдельно

В main создайте анонимный object со свойством version = 3 и методом tag(): String, возвращающим строку "v3". Выведите результат tag().

Напишите функцию pack(a: Int, b: Int), которая возвращает анонимный объект с методом sum(): Int. Вызовите из main с числами 4 и 9 и выведите сумму.

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