Sobes.tech
Middle

Vai Kotlin var izveidot mantoņus no data class?

sobes.tech AI

Atbilde no AI

Nē, tas tieši nav iespējams. data class nevar tikt deklarēta kā open, kas ir nepieciešams nosacījums Kotlin mantošanai. Tas ir tāpēc, ka kompilators ģenerē īpašas metodes (equals(), hashCode(), toString(), copy()), kas ir paredzētas data class, un mantošana varētu traucēt to pareizu darbību.

Tomēr, ir iespējams izmantot saskarnes vai abstraktas klases kā pamata tipu, no kura manto gan parastās klases, gan citas data class (bet ne tieši no citas data class).

// Saskarnes piemērs
interface BaseInfo {
    val id: Int
    val name: String
}

// data class realizē saskarni
data class User(
    override val id: Int,
    override val name: String,
    val age: Int
) : BaseInfo

// Cits data class realizē to pašu saskarni
data class Product(
    override val id: Int,
    override val name: String,
    val price: Double
) : BaseInfo

// Abstraktas klases piemērs
abstract class BaseEntity(open val id: Int, open val name: String)

// data class manto no abstraktas klases
data class Order(
    override val id: Int,
    override val name: String, // Pasūtījuma nosaukums
    val totalAmount: Double
) : BaseEntity(id, name)

Šādā veidā, lai gan tieša mantošana no data class ir aizliegta, ir iespējams sasniegt līdzīgu struktūru un atkārtoti izmantot loģiku, mantojot no saskarnēm vai abstraktām klasēm.