Junior — Middle
O método hashCode usa um campo declarado dentro da data class?
sobes.tech IA
Resposta da IA
Em Kotlin, para data class, o compilador gera automaticamente os métodos hashCode(), equals(), toString(), bem como copy() e componentes para destruição. O método hashCode() baseia-se em todas as propriedades declaradas no construtor primário de data class (ou seja, naquelas indicadas após o nome da classe).
Se dentro de data class for declarado um campo adicional fora do construtor primário, ele não participa no cálculo de hashCode() e equals(). Isto ocorre porque esses métodos consideram apenas as propriedades declaradas no construtor, para garantir uma comparação e hashing corretos dos objetos com base nos dados principais.
Exemplo:
data class User(val id: Int, val name: String) {
var age: Int = 0 // não participa em hashCode e equals
}
fun main() {
val user1 = User(1, "Alice")
val user2 = User(1, "Alice")
user1.age = 25
user2.age = 30
println(user1 == user2) // true, pois a idade não é considerada
println(user1.hashCode() == user2.hashCode()) // true
}