19 Ocak 2015 Pazartesi

Enum

        S.a. Arkadaşlar,
        Bugünkü yazımız enumlar olacak , belki daha önce anlatmam gereken veya yer yer bahsettiğim bir konu olduğu halde , tekrardan hem bir başlık altında toplamak hem de atladığım, gözden kaçırdığım yer olursa onları da almak adına enumlar adında bir yazı yazalım dedik. Peki nedir enumlar ? Sabitlerin değerleri temsil ederler. Fakat bunu yaparken daha derli toplu, anlaşılır bir halde yaparlar. Bu nedenle bu yapıyı kullanırız. Java'ya da 1.5 sürümüyle eklenmiştir, daha öncesinde dediğimiz gibi sabitler (constant) kullanılırdı. Kısaca bir örnek yapacak olursak;
public class TrafikLambasi {
  public static final int GREEN = 1;
  public static final int YELLOW = 0;
  public static final int RED = -1;
}

yerine kısaca

 enum TrafficLight {
  GREEN(1),YELLOW(0), RED(-1);
   TrafficLight(int value) { //int yerine farklı değişkenler tanımlanabilir. 
                                       //GREEN(değişken türüne değer atanır)
    }
yazabiliriz. Şuan durum o kadar da karışık değil çünkü sadece 3 değişkenimiz var. Mesela bu aylar gibi 12 değişken veya farklı yapıda belki yüzlerce değişken kullanacağımız bir proje olsa, ne demek istediğimiz daha iyi anlaşılırdı. Böylece enumla bu karışıklığın önüne geçiyoruz. Şimdi de aşağıda yazdığımız kodda enumlarla ilgili temel şeyler yazmaya çalıştık. Kafanıza takılan şeyleri siz de kodun  üzerinde farklı işlemler yaparak aklınızdaki soruları gidermeye çalışın , böylece daha iyi oturtacağınıza inanıyoruz.

enum Outer { //enum dışarıda tanımladığında sadece default ve public alabilir
     //implements alabilir interfacelerden fakat extends ile kalıtım yapamaz
SHORT, NORMAL, TALL;
         Outer(){
          //class ve abstract sınıflar gibi constructor tanımlanailir
          // ama hatırlarsanız interfacelerde constuctor tanımlayamıyorduk  
        }
}; //noktalı virgül zorunlu değil

class JavaCoffee {
    protected enum Inner{ //içeride tanımlanırsa private ve protected de alabilir
        SHORT1,NORMAL1,TALL1;
            static enum InnerEnumClass{
                //iç içe enum tanımlanailir, static de olabilir
            }
        Inner() {
          //constructora public gelemez. Nedeni enum protected olmasıdır.
          //ya aynısı ya da daha gizlisi olmalıdır !! bunu da tekrar hatırlattık  
        }
         
}; // noktalı virgül zorunlu değil
Outer size;
        Inner size1;
 
    static void metod(){
       //enum InMetod{} , metodlar içinde tanımlanamazlar
     
    }

}

public class JavaCoffeeTest {
public static void main(String[] args) {
JavaCoffee coffee = new JavaCoffee();
             
                //Outer outer = new Outer(); yeni obje oluşturulmaz
             
                //enum sınıf dışında tanımlanırken
coffee.size = Outer.NORMAL;
System.out.println(coffee.size);
                //senum sınıf içinde tanımlanırken
                coffee.size1 = JavaCoffee.Inner.TALL1;
                System.out.println(coffee.size1);
             
}
}

Hiç yorum yok:

Yorum Gönder