Sealed arayüzler, Kotlin'de (1.5 sürümünden itibaren) arayüzün tek bir dosya içinde olası uygulamalarını sınırlamak için kullanılan oldukça yeni bir özelliktir. Kotlin'de başlangıçta, kalıtım hiyerarşisini sıkı bir şekilde kontrol eden ve kapsamlı işleme (örneğin, when ifadelerinde) kolaylık sağlayan sealed sınıflar vardı.
Sorun, bazen mimarinin temel bir sınıf yerine aynı kısıtlama ile bir arayüze ihtiyaç duymasıydı. Sealed arayüzler olmadan, derleyicinin kısıtlamalarına uymanın tek yolu sealed class kullanmaktı, bu da her zaman nesne alanı modeline iyi uymuyordu, özellikle çoklu kalıtım veya davranışların arayüzler üzerinde ayrıştırılmasına ihtiyaç duyulduğunda.
Çözüm: Sealed arayüzler, tüm uygulamalarının aynı dosya içinde tanımlanması gereken bir arayüz tanımlamaya olanak tanır. Bu, kodun güvenliğini artırır ve durumlar veya olaylar hiyerarşisini kontrol etmeyi ve gezinmeyi kolaylaştırır.
Kod örneği:
sealed interface NetworkState class Success(val data: String) : NetworkState class Error(val code: Int) : NetworkState object Loading : NetworkState
Anahtar özellikler:
Sealed arayüz farklı bir dosyada uygulanabilir mi?
Hayır. Sealed sınıflar gibi, sealed arayüzler de yalnızca kendilerinin tanımlandığı aynı dosya içinde uygulanabilir. Dosyanın dışındaysa, bu tür bir arayüzü uygulama girişimi derleme hatasına yol açar.
Sealed arayüz bir sınıftan kalıtım alabilir mi?
Hayır, arayüzler yalnızca diğer arayüzlerden kalıtım alabilir. Ancak sealed arayüz, başka bir (sealed) arayüzden kalıtım alabilir.
Sealed arayüz çoklu uygulamayı destekler mi?
Evet, bu dosyanın içinde bir sınıf birden fazla sealed arayüzünü uygulayabilir veya eğer dil kuralları izin veriyorsa, hem sealed arayüzü hem de sealed sınıfı aynı anda kalıtım alabilir.
Ağ olaylarını işleme sisteminde, geliştirici sıradan arayüzler ve sealed sınıfları karıştırarak kullanır; sonuç olarak "dağınık" bir hiyerarşi ve kod tekrarları oluşur. when ifadeleri bir else dalı içerme zorunluluğu taşır.
Artılar:
Eksiler:
Aynı uygulamada, tüm uygulamaları tek bir dosyaya yerleştirerek sealed interface NetworkEvent'e geçiliyor. Artık NetworkEvent için when ifadeleri tüm durumların işlenmesini gerektiriyor. Kod, daha okunabilir, sürdürülebilir ve güvenli hale geliyor.
Artılar:
Eksiler: