Вы не можете сделать что-то подобное для классов данных, они всегда генерируют equals
и hashCode
одинаково, нет способа предоставить им такие подсказки или опции.
Однако они тольковключить свойства, которые находятся в первичном конструкторе, так что вы можете сделать это, чтобы они включали только index
:
data class CSVColumn(private val index: Int, value: String) {
val value: String = value
}
... за исключением того, что у вас не может быть параметров в первичном конструкторе, которые не являютсясвойств, когда вы используете классы данных.
Таким образом, вам придется каким-то образом ввести вторичный конструктор, который принимает два параметра, например:
class CSVColumn private constructor(private val index: Int) {
var value: String = ""
constructor(index: Int, value: String) : this(index) {
this.value = value
}
}
... но теперь ваш *Свойство 1014 * должно быть var
, чтобы вторичный конструктор мог установить его значение.
Все это говорит о том, что, вероятно, не стоит пытаться обходить его.Если вам нужна реализация не по умолчанию для equals
и hashCode
, классы данных вам не помогут, и вам нужно будет внедрить и поддерживать их вручную.
Редактировать: as @Тайнн отметил, что частный сеттер может быть решением, так что ваш value
не может изменяться вне класса:
class CSVColumn private constructor(private val index: Int) {
var value: String = ""
private set
constructor(index: Int, value: String) : this(index) {
this.value = value
}
}