Инициализация val в data class
У меня есть класс, который принимает одну переменную и немного обрабатывает её для дальнейшего хранения. Мне хотелось бы иметь переменную value неизменяемой и при этом пользоваться всеми функциями data class (при этом в equals и hashCode должна фигурировать только новая value)
data class GF(var value: Int = 0) {
init {
value = value % 10
}
}
Я пытался делать так:
data class GF {
val value: Int
constructor(data: Int = 0) {
value = data % 10
}
}
Однако получаю: Data class must have at least one primary constructor parameter
Ответы (1 шт):
Автор решения: Vadik
→ Ссылка
Сделайте поле в конструкторе приватным и добавьте еще одно поле value в ваш класс:
data class GF(private var data: Int) {
val value: Int
init {
data %= 10
value = data
}
}
Таким образом, equals и hashCode будут использовать обновленное значение. С методом copy тоже никаких проблем не будет.