Middle
Kotlin'de 'sealed' sınıflar nedir ve hangi durumlarda kullanılmalıdır?
sobes.tech yapay zeka
AI'dan gelen yanıt
sealed sınıfı, sınıfların sınırlı bir hiyerarşisini temsil etmek için kullanılır. Bir sealed sınıfın tüm doğrudan alt türleri, aynı dosyada veya (Kotlin 1.5+ için) aynı modüllerde tanımlanmalıdır. Bu, derleyicinin when ifadesinde tüm olası alt türlerin işlendiğini doğrulamasına olanak tanır ve böylece else bloğuna gerek kalmadan tamamlayıcı hale getirir.
Ana özellikler:
- Tüm doğrudan alt sınıflar yerel olmalıdır.
sealedsınıfın yapıcı fonksiyonu varsayılan olarakprivate'dır.sealedsınıfı soyut olamaz.- Nesne oluşturulmasına izin vermez.
Kullanım durumları:
- Sınırlı bir durum veya sonuç kümesini temsil etme. Örneğin,
Loading,Success(data),Error(message).sealed class Result<out T> { data class Success<T>(val data: T) : Result<T>() data class Error(val message: String) : Result<Nothing>() object Loading : Result<Nothing>() } whenifadesinde tamamlayıcı kontrol garantisi ile varyantların işlenmesi.fun processResult(result: Result<String>) { when (result) { is Result.Success -> println("Veri alındı: ${result.data}") is Result.Error -> println("Hata: ${result.message}") Result.Loading -> println("Yükleniyor...") } // `else` bloğuna gerek yok, derleyici tüm alt türleri bilir. }- Her varyantta veri kapsülleme imkanı sağlayan enumlara eşdeğer olarak kullanılır.
Enum sınıflarıyla karşılaştırma:
| Özellik | enum class |
sealed class |
|---|---|---|
| Örnekler | Sınırlı sayıda isimlendirilmiş sabitler | Sınırlı sayıda türler |
| Varyantlardaki veriler | Hayır (sadece özellikler) | Evet (alt sınıflar aracılığıyla) |
| Soyut üyeler | Hayır | Evet |
| Kalıtım | Hayır | Evet, ancak aynı dosya/modüle sınırlı |