Инициализация 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 тоже никаких проблем не будет.

→ Ссылка