-- Java SE

Enumaration

Özetle;

1-Bir Enum referansına sadece o türden bir enum sabiti atanabilir,böylece tür güvenliği(type safety) sağlanır.

2-Enumlar if/else veya switch içerisinde kullanılabilir, == operatörü ile karşılaştırılabilirler.

3-İçerisinde constructor veya metot tanımlanabilir.Ancak new operatörü ile nesne yaratamazlar,constructur’u private olmak zorundadır.

4-java.lang.Enum sınıfını otomatik olarak kalıttıkları(extend) için başka sınıfı kalıtamazlar ancak başka arayüzleri(interface) uygulayabilirler.(inherit)

5-Enum sabitleri otomatik olarak static ve final olarak yaratılırlar,yaratıldıktan sonra değiştirelemezler.

Basit bir enum sınıfı şu şekilde oluşturulur;

public enum Ay {
    OCAK,SUBAT,MART,NISAN,MAYIS,HAZIRAN,TEMMUZ,AGUSTOS,EYLUL,EKIM,KASIM,ARALIK;
}

 

Bir enum sabitine değer atama :

Ay ay1 = Ay.OCAK;
        Ay ay2 = Ay.SUBAT;
        Ay ay3 = Ay.MART;
        Ay ay4 = Ay.NISAN;
        Ay ay5 = Ay.MAYIS;
        Ay ay6 = Ay.HAZIRAN;
        Ay ay7 = Ay.TEMMUZ;
        Ay ay8 = Ay.AGUSTOS;
        Ay ay9 = Ay.EYLUL;
        Ay ay10 = Ay.EKIM;
        Ay ay11 = Ay.KASIM;
        Ay ay12 = Ay.ARALIK;

 

Switch Case kullanımına bir örnek :

 

 public void hangiAy(Ay ay){

        switch(ay){
            case OCAK:
                System.out.println("Yılın ilk ayı");
                break;
            case SUBAT:
                System.out.println("Yılın ikinci ayı");
                break;

            //Devam ettirilebilir.Uzatmıyorum.
        }
    }

 

values() komutu ile bir enum içerisindeki tüm değerler alınabilir.

for(Ay ay : Ay.values()){
            System.out.println(ay);
        }

/* ---EKRAN ÇIKTISI---

OCAK
SUBAT
MART
NISAN
MAYIS
HAZIRAN
TEMMUZ
AGUSTOS
EYLUL
EKIM
KASIM
ARALIK

*/

 

Constructur’a sahip bir Enum :

public enum Telefon {

    SAMSUNG(100),
    IPHONE(70),
    LG(37),
    NOKIA(20);

    private int fiyat;

    public int getFiyat() {
        return fiyat;
    }

    public void setFiyat(int fiyat) {
        this.fiyat = fiyat;
    }

    private Telefon (int fiyat){
        this.fiyat = fiyat;
    }

Yukarda int tipinde parametreye sahip bir enum türü constructuru var,bu nedenle enum sabiti tanımlarken bu parametreyi geçmek zorundayız.Ayrıca enum türlerinde constructor her daim private olmak zorundadır,eğer ki belirtmezsek derleyici otomatik olarak private erişim belirleyicisini ekleyecektir.Bu yüzden enum sabitleri dışarıdan new operatörü ile yaratılamazlar.Enum türleri için yazılmış constructurlar sadece enum sabitleri tarafından çağırılabilirler.

Java’da Enum türleri aslında java.lang.Enum sınıfından kalıtılmış özel sınıflardır. Enum sabitleri ise bu özel sınıflardan yaratılmış public static final nesnelerdir. Dolayısıyla Enum türleri esasında java derleyicisi tarafından sınıfa çevrilmekte ve bir takım yardımcı alanlar/metotlar eklenerek yazılımcı için çok yararlı bir formata dönüştürülmektedir. Şimdi bu nasıl oluyor ona bakalım.

Java derleyicisi enum türleri için farklı alanlar ve metotlar tanımlar,o kısımları atlarsak yazılan enum türünün derleme sonra kabaca aşağıdaki sınıfa dönüştürüldüğünü söyleyebiliriz.

public final class Telefon extends Enum<Telefon> {

    public static final Telefon SAMSUNG = new Telefon(100);
    public static final Telefon IPHONE  = new Telefon(70);
    public static final Telefon LG      = new Telefon(37);
    public static final Telefon NOKIA   = new Telefon(20);


    private int fiyat;

    private Telefon(int fiyat) {
        this.fiyat = fiyat;
    }

    public void setFiyat(int fiyat){
        this.fiyat = fiyat;
    }
    public int getFiyat() {
        return fiyat;
    }

}

 

 

Yorum bırak

Yorum