Enum Class Nedir?

Tuğçe Aras
3 min readSep 1, 2022

--

Selamlar 👋, bu yazımda sizlere Enum class’ların ne olduğu ve arka planında işlerin nasıl işlediğinden bahsedeceğim. İyi okumalar. ✨

🔹Enum Class Nedir?

🔸 Aynı veri kümelerini gruplayabildiğimiz class türüdür. İyi güzel de aynı veri kümeleri ne anlama geliyor? Örneğin;

Aylar, burçlar, haftanın günleri, futbol takımları,.. gibi

Bu sayede enum class’ı çağırdığımızda opsiyonel seçenekleri kolayca görebilmekteyiz.

Basitçe yapısı şu şekildedir:

RED, GREEN, BLUE bizim Enum sabitlerimizdir.

🔸 Abstract, inner, sealed, open olamazlar.

🔸 Yapısı gereği Enum class’lar final’dır. final keyword’nü yazsanız bile karşınıza uyarı çıkacaktır.

🔸 Özünde class oldukları için constructor’ı olabilir. Ancak Enum class’ın içerisinde sabitleriniz veri tutmayacaksa constructor yazmanın bir anlamı yok.

constructor’lı hali şu şekildedir:

🔸 Enum sabitleri aslında birer class’tır. Nasıl? 😲 Önünde class keyword’ü yok ki!!! Hemen arka planda nasıl tutulduklarına bakalım.

Show Kotlin ByteCode’u açalım.

Bu arada Show Kotlin ByteCode’u bilmeyenler için kısaca ne olduğundan da bahsedelim.

Show Kotlin ByteCode bizim yazdığımız Kotlin kodunun Assembly çıktısını vermektedir. Eğer o çıktıyı decompile edersek de Kotlin kodumuzun Java tarafındaki karşılığını görebilmekteyiz.

🔸 Enum class’ların nesnesi oluşturulamaz. Nasıl yani bu bir class ama başında class keyword’ü var? Şöyle ki;

Tekrar kodumuzun arka planda nasıl tutulduğuna bakalım.

Default constructor’ı private olduğundan dolayı nesne oluşturmaya izin verilmez.

🔸 Her Enum sabiti arka planda default olarak name ve ordinal değişkenlere sahiptir.

name: Enum sabitinin ismini , ordinal: Enum sabitinin index’ni verir.

Bakalım öyle miymiş arka planda.

🔸 Enum class’lar başka bir class’ı miras alamazlar. Denediğinizde hata aldığınızı göreceksiniz.

  • Ancak Enum class’lara interface implement edilebilir. Edildiği taktirde interface içerisindeki değişken ya da fonksiyonlar Enum sabitleri içerisinde override edilmek zorundadır. Neden ama?

Çünkü ColorType class’ı RED,GREEN ve BLUE’nun üst class’dır. Bundan dolayıda override edilmeleri gerekir.

Başka türlü yapılamaz mı? Yani ben illa Enum sabitleri içerisinde mi override edebiliyorum sadece?

Hayır, istersek Enum sabitlerinin içerisinde değil de direkt ColorType sınıfının içerisinde de override edebiliriz. Bunu yaptığımız taktirde Enum sabitleri içerisinde tekrardan override edilmeye gerek kalmaz. Ancak genel eğilim Enum sabitleri içerisinde override etmektir.

🔸 Enum class içerisine abstract değişken ya da fonksiyon tanımlanabilir. Tanımlanırsa Enum sabitleri içerisinde override edilmek zorundadır.

Aynı zamanda Enum class içerisinde open fonksiyonda yazılabilir. Ancak override edilme zorunluluğu yoktur.

🔸 Son olarak nasıl çağrıldıklarına bakalım.

gif kaynak : The End Vhs GIF — Find & Share on GIPHY (2022). Available at: https://giphy.com/gifs/tumblr-featured-the-end-74IhoSxkHHZ3W

--

--

Tuğçe Aras
Tuğçe Aras

Written by Tuğçe Aras

Android Developer at Şekerbank T.A.Ş. 💻💚 | https://bio.link/tugcearas

No responses yet