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

Свойства в теле data class в Kotlin

Не каждое поле data class обязано стоять в круглых скобках после имени. Свойство можно объявить в теле класса - тогда оно не входит в автоматический toString, equals, copy и функции componentN:

data class User(val name: String, val age: Int) { var loginCount: Int = 0 } fun main() { val u = User("Ann", 25) u.loginCount = 3 println(u) }

В выводе видны только name и age - счётчик в заголовок не попал. Для служебных данных, которые не должны участвовать в сравнении записей, тело класса подходит лучше, чем заголовок:

data class Item(val sku: String, val qty: Int) { val lineTotal: Int get() = qty * 10 } fun main() { val row = Item("A1", 3) println(row.lineTotal) println(row) }

Вычисляемое свойство в теле можно строить из полей заголовка - как геттер без параметров в обычном классе. При copy меняются только параметры конструктора; свойства тела пересчитываются для нового объекта:

data class Box(val w: Int, val h: Int) { val area: Int get() = w * h } fun main() { val b = Box(2, 3) val wide = b.copy(w = 5) println(b.area) println(wide.area) }

Сделайте data class Product с полями title и price. В теле добавьте свойство label - строка из "sale: " и значения title. Создайте объект с title = "Pen" и price = 5. Выведите на экран label и результат println для самого объекта.

Сделайте data class Segment с полями start и end. В теле добавьте length как разность end - start. Создайте сегмент от 2 до 7 и выведите на экран length.

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