Sobes.tech
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.
  • sealed sınıfın yapıcı fonksiyonu varsayılan olarak private'dır.
  • sealed sı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>()
    }
    
  • when ifadesinde 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ı