Middle
Kotlin-də data class-dan irsənlər yarada bilərikmi?
sobes.tech Süni İntellekt
AI-dan cavab
Xeyr, bu birbaşa mümkün deyil. data class open kimi elan edilə bilməz, bu da Kotlin-də irsiyyət üçün zəruri şərtdir. Bu, kompilyatorun equals(), hashCode(), toString(), copy() kimi xüsusi metodlar yaratması ilə əlaqədardır və irsiyyət onların düzgün işləməsinə mane ola bilər.
Ancaq, interfeys və ya abstrakt sinflər kimi əsas növ istifadə etmək mümkündür və həm adi sinflər, həm də digər data classlər (amma birbaşa başqa data class-dan deyil) irsiyyət edə bilər.
// İnterfeys nümunəsi
interface BaseInfo {
val id: Int
val name: String
}
// data class interfeysi həyata keçirir
data class User(
override val id: Int,
override val name: String,
val age: Int
) : BaseInfo
// Eyni interfeysi həyata keçirən başqa data class
data class Product(
override val id: Int,
override val name: String,
val price: Double
) : BaseInfo
// Abstrakt sinif nümunəsi
abstract class BaseEntity(open val id: Int, open val name: String)
// data class abstrakt sinifdən irsiyyət edir
data class Order(
override val id: Int,
override val name: String, // Sifarişin adı
val totalAmount: Double
) : BaseEntity(id, name)
Beləliklə, data class-dan birbaşa irsiyyət qadağan olunsa da, interfeys və ya abstrakt sinflər vasitəsilə oxşar struktur və məntiqin təkrar istifadəsi əldə edilə bilər.