Kotlin: Sealed Class

Sealed class yapısı Kotlin’de olup Java’da olmayan ve Java’daki enum class yapısının bir üst modeli diyebileceğimiz bir yapıya sahiptir.

Öncelikle enum class yapısını hatırlayalım.

Örneğin sunucudan verileri alıyoruz ve bu verilerin durumunu bir enum yapısı ile tanımlamak istersek;

Java

Kotlin

Gördüğünüz gibi oldukça basit ve iki dil için de benzer yapıya sahipler.

Kullanımlarını da alttaki gibi yapabiliriz.

Üstte gördüğünüz gibi success durumunda 2 farklı metod çağrısı yapmamız gerekiyor. Bunlar setStateve showDatametodları olacaktır. Bunu yapmamızın sebebi enumların data tutma konusundaki eksikliklerinden kaynaklıdır. Aslında data tutma kısmını alttaki gibi enum classa constructor tanımlayarak yapabiliriz.

Ancak bu durumda şöyle bir sorunla karşı karşıyayız; Veriler her durumda elimize gelmiyor sadece SUCCESS durumunda bize geliyor. Diğer durumlar sadece o anlık durumu belirtiyor. Yani biz bu kodu çalıştırmak istediğimizde ERROR ve LOADING durumlarında bizden veri isteyecek ancak elimizde bir veri yok. Aslında bizim ihtiyacımız, her durumun farklı parametreler alabilmesi. İşte burada Sealed class kullanımı devreye giriyor.

Sealed class ile üst sınıf – alt sınıf hiyerarşisi kurabiliyorsunuz.

Örneğimizi şimdi sealed class kullanarak güncelleyelim.

Gördüğünüz gibi Error ve Loading durumlarında herhangi bir veri almadık sadece durumu belirttik ancak Success durumu için sealed class içinde bir data class tanımlayarak constructor parametresi olarak datayı alabildik.

Eğer sealed class içinde herhangi bir veri alan durum yani tanımlanan class yoksa bunu kotlindeki object yapısı ile tanımlamak daha iyi olacaktır. Aslında onları singleton olarak tutmuş olacağız.

Bu classın kullanımı da alttaki gibi olacaktır.

https://kotlinlang.org/docs/reference/sealed-classes.html

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.