Sobes.tech
Junior — Middle

Data class'ta equals metodunu кайра жазганда негизги класстын талааларын эске алуу керекпи?

sobes.tech AI

AIден жооп

Kotlinде, data class автоматтык түрдө equals, hashCode жана toString методдорун түзөт, алардын ичинде гана класста жарыяланган мүнөздөмөлөрдү эске алат. Эгер сиздин классыңыз негизги класс менен мурас алса жана анын өз талаалары болсо, бул талаалар боюнча салыштыруу боюнча автоматтык түрдө катышпайт.

Эгер салыштыруу логикасы негизги класс талааларын эске алууну талап кылса, equals методун кол менен кайра жазуу сунушталат, super.equals(other) чакырып жана негизги класс талааларын текшерип. Эгер негизги класс салыштыруу үчүн маанилүү эмес маалыматтарды камтыбаса, автоматтык түзүлгөн методго ишенсе болот.

Мисал: негизги класс эске алынып equals кайра жазуу:

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()
}

Ошондуктан, объекттерди салыштырганда маанилүү болсо, негизги класс талааларын эске алуу керек.