Sobes.tech
Middle

Kas Kotlinis on võimalik luua pärilasi data class-ist?

sobes.tech AI

Vastus AI-lt

Ei, see ei ole otse võimalik. data class-i ei saa deklareerida kui open, mis on Kotlinis pärimise jaoks vajalik tingimus. See on tingitud sellest, et kompilaator genereerib spetsiaalsed meetodid (equals(), hashCode(), toString(), copy()), mis on mõeldud data class-ile, ning pärimine võib nende õiget tööd häirida.

Kuid, saab kasutada liideseid või abstraktseid klasse põhityübina, millest pärivad nii tavalised klassid kui ka teised data class-id (aga mitte otse teise data class-i kaudu).

// Liidese näide
interface BaseInfo {
    val id: Int
    val name: String
}

// data class rakendab liidest
data class User(
    override val id: Int,
    override val name: String,
    val age: Int
) : BaseInfo

// Teine data class rakendab sama liidest
data class Product(
    override val id: Int,
    override val name: String,
    val price: Double
) : BaseInfo

// Abstraktse klassi näide
abstract class BaseEntity(open val id: Int, open val name: String)

// data class pärib abstraktsest klassist
data class Order(
    override val id: Int,
    override val name: String, // Tellimuse nimi
    val totalAmount: Double
) : BaseEntity(id, name)

Sellisel viisil, kuigi otsene pärimine data class-ist on keelatud, saab saavutada sarnase struktuuri ja taaskasutada loogikat liideste või abstraktsete klasside pärimise kaudu.