Junior — Middle
Por que em Kotlin se sobrescreve o método hashCode para objetos universais?
sobes.tech IA
Resposta da IA
Em Kotlin, o método hashCode é sobrescrito para objetos universais, a fim de garantir o funcionamento correto com estruturas de dados baseadas em hash, como HashMap ou HashSet. Por padrão, hashCode pode ser baseado no endereço do objeto na memória, o que não é adequado se objetos logicamente iguais devem ter o mesmo hash.
Sobrescrever hashCode juntamente com equals garante que objetos considerados iguais terão o mesmo código hash, o que é importante para uma busca, inserção e remoção corretas nas coleções.
Exemplo de sobrescrita em uma data class (Kotlin gera equals e hashCode automaticamente):
data class User(val id: Int, val name: String)
Se a classe não for uma data class, deve-se sobrescrever manualmente:
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is User) return false
return id == other.id && name == other.name
}
override fun hashCode(): Int {
return 31 * id + name.hashCode()
}