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.