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

Явное поле в Kotlin

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

В Kotlin 2.4 для этого служит блок field после объявления свойства. Тип в заголовке остается для внешнего мира, а после field = задается реальное хранилище:

class Cart { val titles: List<String> field = mutableListOf<String>() fun add(title: String) { titles.add(title) } }

Снаружи titles имеет тип List<String>. Внутри метод add работает с изменяемым списком, потому что компилятор знает фактическое поле. Собственный getter при явном поле не пишут - доступ идет напрямую к хранилищу:

class Cart { val titles: List<String> field = mutableListOf<String>() fun add(title: String) { titles.add(title) } } fun main() { val cart = Cart() cart.add("pen") cart.add("book") println(cart.titles.size) }

Тот же прием подходит, когда нужно накопить элементы в процессе работы объекта, но не раскрывать наружу изменяемую коллекцию:

class TagSet { val tags: Set<String> field = mutableSetOf<String>() fun remember(tag: String) { tags.add(tag) } } fun main() { val set = TagSet() set.remember("draft") println(set.tags.contains("draft")) }

Сделайте класс журнала с свойством строк только для чтения снаружи и изменяемым списком внутри через явное поле. Добавьте две записи и выведите их число.

Сделайте класс с множеством меток: снаружи тип неизменяемого множества, внутри - изменяемое хранилище. Добавьте метку "beta" и проверьте, что она есть в наборе.

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