Sealed arayüz — Kotlin'de, bir modül içinde uygulama sayısını sınırlamaya olanak tanıyan özel bir arayüz türüdür. Sealed sınıflar, Kotlin'de daha önce ortaya çıkmışken, sealed arayüzler, örneğin durum hiyerarşeleri veya olay işleme üzerinde daha fazla kontrol sağlamak için Kotlin 1.5 itibarıyla bir evrim olarak eklenmiştir.
Geliştiriciler, sealed sınıfları, miras almayı sınırlamak ve güvenli hiyerarşiler oluşturmak için daha önce kullanıyordu. Ancak, birden fazla türden miras almanın faydalı olduğu yapılar için esnekliğe ihtiyaç duyulduğunda sealed arayüzler gerekli hale geldi.
Sealed arayüzler olmadan, arayüzün alt sınıflarının kümesini esnek bir şekilde yönetmek mümkün değildir. Bu, örneğin, tümü arayüzlere dayalı olduğunda, durumları işlerken eksiksiz bir when kontrolünü imkansız hale getirir, yalnızca soyut/konkret sınıflar değil.
Sealed arayüz kullanmak şunları sağlar:
when kullanımında else dalı olmadan güvenli bir şekilde kullanmak — derleyici, kapsanmayan durumlar hakkında uyarıda bulunur.Kod örneği:
sealed interface Event class Click : Event class Scroll : Event fun handle(event: Event) = when(event) { is Click -> println("Tıklama olayı") is Scroll -> println("Kaydırma olayı") }
Anahtar özellikler:
Sealed arayüzlerin, tanımlandığı dosyanın dışında uygulamaları olabilir mi?
Hayır, sealed arayüzün uygulamaları aynı modül içinde olmalıdır. Bu, tam kapsayıcılığı sağlar ve derleyicinin sayısını kontrol etmesine olanak tanır.
Sealed arayüzler sınıflar ve nesnelerle nasıl etkileşimde bulunur?
Sealed arayüz, hem normal sınıflar hem de object-sınıflar tarafından, ayrıca data object (Kotlin 1.9+) ile uygulanabilir. Bu tür bir arayüz, birden fazla miras alma durumunda bulunabilir, bu sealed sınıf ile yapılamaz.
sealed interface Operation object Add: Operation object Subtract: Operation
Sealed arayüzler iç içe olabilir mi?
Evet, sealed arayüzü başka bir sealed sınıfın içinde veya başka arayüzlerin üstünde tanımlamak mümkündür. Önemli olan, tüm uygulamaların aynı modül içinde olmasıdır.
Bir uygulamada UI durumlarını sadece sealed-modifikatörü olmadan arayüzler olarak tanımladık. Bir uygulamayı unuttuk, statik analiz bu hatayı yakalayamadı; hata sadece prod ortamında ortaya çıktı.
Artıları:
Eksileri:
when içinde kapsayıcılık garantisi yok.Ekran olaylarının modeli için sealed arayüzlerin kullanımı. Tüm uygulamalar, modül içinde tek bir dosyada bulunmakta, derleyici, when içinde bir durum atlandığında kapatılmamış dallar hakkında uyarıda bulunmaktadır.
Artıları:
Eksileri: