Я переопределил метод equals объекта Java.(на самом деле объекты в kotlin, но его легко понять, я просто переопределяю метод equals).но теперь, чтобы сохранить контракт равных, я должен также переопределить метод хэш-кода.но я не уверен, как вставить реализацию для хэш-кода, который подходит для метода equals.вот что у меня есть: компилятор
data class AddressModel(
var id_address: Int = 0,
var id_country: Int = 0,
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is AddressModel)
return false
else {
if (other.id_address == this.id_address)
return true
}
return false
}
}
настоятельно рекомендует переопределить метод hashCode.но я не понимаю, что реализовать.в переопределении equals я просто хочу проверить, имеет ли addressModel тот же Id, что и другой, если это так, то я предполагаю, что он равен.
это то, что я имею до сих пор:
override fun hashCode(): Int {
return Objects.hash(id_address, id_country);
}
но я думаю, что это лучше:
override fun hashCode(): Int {
return Objects.hash(id_address); //base hash off same as equals the id_address
}
это рекомендуемый способ чтения, но что это значит?если бы я добавил больше полей класса, мне нужно было бы также добавить больше полей в метод Objects.hash?я бы предпочел старый способ skool сделать это, так как этот вызов требует Android Api 19 и я поддерживаю более низкий (API 16).
, чтобы быть понятным, я понимаю, что если я не переопределить хэш-код вместе с равно, токаждый экземпляр, например «new AddressModel (707, 867)», будет иметь свой хеш-код.и тогда HashMap, например, будет думать, что эти объекты различны и не равны, чтобы заменить их при вычислении хеша для хранилища.но я просто не знаю, что положить в реализацию hashCode.Вы можете показать мне либо в Kotlin или Java, все в порядке.
обновление: будет ли этого достаточно:
override fun hashCode(): Int { return id_address.hashCode() }