Middle
È possibile creare erediti da data class in Kotlin?
sobes.tech AI
Risposta dell'AI
No, non è possibile farlo direttamente. data class non può essere dichiarato come open, il che è un requisito per l'ereditarietà in Kotlin. Ciò è dovuto al fatto che il compilatore genera metodi speciali (equals(), hashCode(), toString(), copy()) per data class, e l'ereditarietà potrebbe compromettere il loro corretto funzionamento.
Tuttavia, è possibile utilizzare interfacce o classi astratte come tipi di base, da cui ereditano sia classi normali che altri data class (ma non direttamente da un altro data class).
// Esempio di interfaccia
interface BaseInfo {
val id: Int
val name: String
}
// data class implementa l'interfaccia
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Un altro data class implementa la stessa interfaccia
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Esempio di classe astratta
abstract class BaseEntity(open val id: Int, open val name: String)
// data class eredita dalla classe astratta
data class Order(
override val id: Int,
override val name: String, // Nome dell'ordine
val totalAmount: Double
) : BaseEntity(id, name)
In questo modo, anche se l'ereditarietà diretta da data class è vietata, si può ottenere una struttura simile e riutilizzo della logica tramite l'ereditarietà di interfacce o classi astratte.