Middle
É possível criar herdeiros de data class em Kotlin?
sobes.tech IA
Resposta da IA
Não, não é possível fazê-lo diretamente. data class não pode ser declarado como open, o que é uma condição necessária para herança em Kotlin. Isso ocorre porque o compilador gera métodos especiais (equals(), hashCode(), toString(), copy()) para data class, e a herança poderia comprometer seu funcionamento correto.
No entanto, é possível usar interfaces ou classes abstratas como tipos base, das quais herdam tanto classes normais quanto outros data class (mas não diretamente de outro data class).
// Exemplo de interface
interface BaseInfo {
val id: Int
val name: String
}
// data class implementa a interface
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Outro data class implementa a mesma interface
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Exemplo de classe abstrata
abstract class BaseEntity(open val id: Int, open val name: String)
// data class herda de classe abstrata
data class Order(
override val id: Int,
override val name: String, // Nome do pedido
val totalAmount: Double
) : BaseEntity(id, name)
Assim, embora a herança direta de data class seja proibida, é possível alcançar uma estrutura semelhante e reutilizar lógica através da herança de interfaces ou classes abstratas.