Sobes.tech
Junior — Middle

Deve-se considerar os campos da classe base ao substituir o método equals numa data class?

sobes.tech IA

Resposta da IA

Em Kotlin, a data class gera automaticamente os métodos equals, hashCode e toString, considerando apenas as propriedades declaradas na própria classe. Se a sua classe herda de uma classe base com seus próprios campos, esses campos por padrão não participam na comparação.

Se a lógica de comparação deve levar em conta os campos da classe base, recomenda-se sobrescrever manualmente o método equals, chamando super.equals(other) e adicionando a verificação dos campos da classe base. Caso contrário, se a classe base não contém dados relevantes para a comparação, pode confiar no método gerado.

Exemplo de sobrescrita de equals considerando a classe base:

open class Base(val id: Int) {
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (other !is Base) return false
        return id == other.id
    }

    override fun hashCode() = id
}

data class Derived(val name: String) : Base(0) {
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (other !is Derived) return false
        if (!super.equals(other)) return false
        return name == other.name
    }

    override fun hashCode() = super.hashCode() * 31 + name.hashCode()
}

Portanto, considere os campos da classe base em equals se eles forem importantes para a lógica de comparação de objetos.