Kotlin'de enumerasyonlar (enum class), sınırlı bir değer kümesi tanımlamak ve bunu metodlar ve özelliklerle genişletmek için izin verir.
enum class Direction { NORTH, SOUTH, WEST, EAST }
enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF); fun containsRed() = (rgb and 0xFF0000 != 0) }
Color.RED.name), indeksle (ordinal) erişilebilir ve values() ile tam liste elde edilebilir.== (kimlik) ile karşılaştırılır, çünkü öğeler benzersizdir.Kotlin'de enum sınıfında, Java'da olduğu gibi her öğenin onu yeniden tanımlaması için bir soyut metod tanımlanabilir mi?
Doğru Cevap: Evet, enum tarzında bir soyut metod tanımlanabilir ve her öğe kendi uygulamasını sağlamak zorundadır!
enum class State { START { override fun next() = RUNNING }, RUNNING { override fun next() = STOPPED }, STOPPED { override fun next() = STOPPED }; abstract fun next(): State }
Hikaye
Java'dan Kotlin'e geçişte ekip, yeni enum sınıfını normal bir sınıf gibi miras almaya çalıştı — anlaşılmıştır ki enum miras alınamaz, bu da mimariyi bozmuştur. Durum makinelerinin modülerliğine tamamen yeni bir yaklaşım geliştirmek zorunda kaldılar.
Hikaye
Veritabanında değer depolamak için elemanın adını (
enum.name) aldılar, ancak refaktörizasyonda enum öğeleri yeniden adlandırıldı — veritabanındaki veriler yeni mantığa uymadı ve tutarsızlık meydana geldi (storage value pattern uygulanmadı).
Hikaye
Gson ile enum sınıfını serileştirirken özel TypeAdapter'ı bağlamayı unuttular. Üretimde hizmet düzensiz JSON değerleri vermeye başladı çünkü standart parser yanlış alanı (ordinal veya name) serileştiriyor ve deserialization mikros servisler arasında uyuşmuyordu.