Java’da Enum Sınıfları
Enum’lar, en kısa ifadesiyle, önceden belirlenmiş sınırlı sayıda sabit değerleri alabilen yeni bir tür oluşturmak için kullanılır. Yani, enum türünde bir değişken yalnızca kendi listesinde belirlenmiş değerlerden birini alabilir, başka bir değere izin verilmez. Başka bir deyişle, enum’lar alabileceği değerleri kendiniz belirlediğiniz yeni bir veri türü oluşturmanızı sağlar. Enum’lar JDK 5 ile dile eklenmiştir.
Şimdi kısıca bir örnek yapalım, örnekte haftanın günlerini enum olarak
belirttik:
public enum WeekDays
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
Enum’lar enum ifadesiyle oluşturulur ve her bir değer birbirinden virgül ile ayrılır. Yukarıdaki kod sayesinde, WeekDays adında yeni bir tür oluşturduk ve bu türün yalnızca 7 farklı değeri olabilir.
Şimdi bu değerleri değişken olarak nasıl kullanacağımızı görelim:
WeekDays midDay = WeekDays.THURSDAY;
Bir enum değerini kullanmak için enum türünün adından sonra nokta koyulur ve değerin ismi yazılır.
Enum’lar switch ifadelerini kontrol etmek için kullanılabilir:
public static void main(String[] args) {
WeekDays day = WeekDays.FRIDAY;
switch (day)
{
case MONDAY:
System.out.println("OFF PAZARTESI");
break;
case FRIDAY:
System.out.println("HEY, CUMA GUNU!");
break;
}
}
Java Enum values() ve valueOf() metotları
Bütün enum türlerinde ortak olan iki static metot vardır. Bu metotların tanımı aşağıdaki gibidir:
public static enum-türü[] values()
public static enum-türü valueOf(String isim)
values() metodu bir enum türünün bütün değerlerini dizi halinde verir.
Örneğin, aşağıdaki kodu çalıştırdığımızda konsola 7 yazar:
public static void main(String[] args) {
System.out.println(WeekDays.values().length); // Konsola 7 yazar
}
valueOf() metodu ismini bildiğimiz bir enum değerine ulaşmamızı sağlar:
public static void main(String[] args) {
WeekDays monday = WeekDays.valueOf("MONDAY");
System.out.println(monday.name()); // Konsola MONDAY yazar.
}
Şuna dikkat etmelisiniz: valueOf() metodu, eğer parametre olarak verdiğiniz isimde bir enum değeri yoksa IllegalArgumentException hatası fırlatır:
public static void main(String[] args) {
WeekDays monday = WeekDays.valueOf("SALI"); // HATA VERİR
}
Java Enum name() ve ordinal() metotları
Bir enum değerinin ismini elde etmek için name() metodunu, enum türü
içinde belirtildiği sırayı elde etmek için ordinal() metodunu kullanırız.
public static void main(String[] args) {
System.out.println(WeekDays.TUESDAY.name()); // Konsola TUESDAY yazar.
System.out.println(WeekDays.TUESDAY.ordinal()); // Konsola 1 yazar.
}
Şuna dikkat etmelisiniz; enum değerlerinin ordinal sıralaması 0’dan başlar.
Java’da Enumlar Sınıflara Benzer
Diğer birçok programlama dilinde enum’lar sabit değerlerden ibarettir.
Java’da ise enum’lar birer sınıftır.
Enum değerlerini new deyimiyle oluşturmasanız da
sınıfların çoğu özelliğine sahiptirler. Tıpkı sınıflar gibi, enum’ların da alanları ve metotları olabilir. Fakat enum’lar miras alıp veremez.
Aşağıdaki örnekte WeekDays enum’unu yeniden yazalım:
public enum WeekDays
{
MONDAY("Pazartesi"),
TUESDAY("Salı"),
WEDNESDAY("Çarşamba"),
THURSDAY("Perşembe"),
FRIDAY("Cuma"),
SATURDAY("Cumartesi"),
SUNDAY("Pazar");
private final String turkishName;
WeekDays(String turkishName)
{
this.turkishName = turkishName;
}
public String getTurkishName()
{
return turkishName;
}
}
Bu örnekte enum’a turkishName adında final bir alan ekledik. Bu değişken
sabit olduğu için değer atamak adına bir yapılandırıcı oluşturduk. Enum
değerlerini tanımlarken yapılandırıcıları nasıl kullandığımıza dikkat edin.
public static void main(String[] args) {
System.out.println(WeekDays.FRIDAY.getTurkishName()); // Konsola Cuma yazar.
}
Yukarıdaki kodu çalıştırdığımızda konsola “Cuma” yazar.
Java enum’larının sınıflara benzemesinin enum’lara ne kadar esneklik kattığını fark etmişsinizdir. Herkese iyi kodlamalar.