Middle
Ar galima kurti paveldėtojus iš data class Kotlin?
sobes.tech AI
Atsakymas iš AI
Ne, tai tiesiogiai nėra įmanoma. data class negali būti deklaruota kaip open, kas yra būtinas reikalavimas Kotlin kalboje paveldėjimui. Tai yra todėl, kad kompiliatorius generuoja specialius metodus (equals(), hashCode(), toString(), copy()), skirtus data class, ir paveldėjimas galėtų sutrikdyti jų teisingą veikimą.
Tačiau, galima naudoti sąsajas arba abstrakčias klases kaip bazinius tipus, iš kurių paveldi tiek įprastos klasės, tiek kitos data class (bet ne tiesiogiai iš kitos data class).
// Sąsajos pavyzdys
interface BaseInfo {
val id: Int
val name: String
}
// data class įgyvendina sąsają
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Kitas data class įgyvendina tą pačią sąsają
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Abstrakčios klasės pavyzdys
abstract class BaseEntity(open val id: Int, open val name: String)
// data class paveldi iš abstrakčios klasės
data class Order(
override val id: Int,
override val name: String, // Užsakymo pavadinimas
val totalAmount: Double
) : BaseEntity(id, name)
Šiuo būdu, nors tiesioginė paveldėjimas iš data class yra uždrausta, galima pasiekti panašią struktūrą ir pakartotinai naudoti logiką per paveldėjimą iš sąsajų ar abstrakčių klasių.