Можно ли обозначать поля только в теле data class не трогая конструктор

«Можно ли обозначать поля только в теле data class не трогая конструктор» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. В data class поля можно объявлять непосредственно в теле класса, используя val или var. Они автоматически станут частью toString(), equals(), hashCode() и copy(), но не будут включены в первичный конструктор.

data class User(val name: String) {
    var age: Int = 0 // не в конструкторе, но участвует в equals/hashCode
}

Нюансы:

  • Поля в теле класса инициализируются после первичного конструктора.
  • Если нужно исключить поле из equals/hashCode, пометь его @Transient.
  • Поля в конструкторе обязательны при создании объекта, а в теле — нет.