Ответ
Да, можно. В data class поля можно объявлять непосредственно в теле класса, используя val или var. Они автоматически станут частью toString(), equals(), hashCode() и copy(), но не будут включены в первичный конструктор.
data class User(val name: String) {
var age: Int = 0 // не в конструкторе, но участвует в equals/hashCode
}
Нюансы:
- Поля в теле класса инициализируются после первичного конструктора.
- Если нужно исключить поле из
equals/hashCode, пометь его@Transient. - Поля в конструкторе обязательны при создании объекта, а в теле — нет.