Middle
Kun je in Kotlin afgeleiden maken van data class?
sobes.tech AI
Antwoord van AI
Nee, dat is niet rechtstreeks mogelijk. data class kan niet als open worden gedeclareerd, wat een vereiste is voor overerving in Kotlin. Dit komt doordat de compiler speciale methoden (equals(), hashCode(), toString(), copy()) genereert voor data class, en overerving zou hun correcte werking kunnen verstoren.
Echter, je kunt interfaces of abstracte klassen gebruiken als basistype, waar zowel gewone klassen als andere data class van erven (maar niet rechtstreeks van een andere data class).
// Voorbeeld van een interface
interface BaseInfo {
val id: Int
val name: String
}
// data class implementeert de interface
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Een andere data class implementeert dezelfde interface
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Voorbeeld van een abstracte klasse
abstract class BaseEntity(open val id: Int, open val name: String)
// data class erft van de abstracte klasse
data class Order(
override val id: Int,
override val name: String, // Naam van de bestelling
val totalAmount: Double
) : BaseEntity(id, name)
Op deze manier, hoewel directe overerving van data class verboden is, kan een vergelijkbare structuur en hergebruik van logica worden bereikt via overerving van interfaces of abstracte klassen.