public class Almanak {
public static final int MEVSIM_KIS = 0;
public static final int MEVSIM_BAHAR = 1;
public static final int MEVSIM_YAZ = 2;
public static final int MEVSIM_SONBAHAR = 3;
.... }
javada guvenli enum kullanimi icin ciddi tasarim yapmak gerekebiliyordu. Sirf enum siniflari olusturmak icin IDE yazilimlarinda ozel araclar bile kullaniliyor. Normalde guvenli bicimde hakkini vererek gerceklestirmek icin sayfa boyu kod gerektirebilecek oyun kagidi destesi olusturma islemi Java 1.5 typesafe enum, generics ve gelismis for ile asagidaki sekilde kolayca gerceklestirilir. asagida goruldugu gibi sadece enum Tip { maca, sinek, karo, kupa} diyerek dortlu bir kume olusturuluyor. Bu degerler ancak Tip sinifina ait nesnelere atanabilir oldugundan hatali kullanim ihtimali cok dusuktur. Kullanimi da C ve C++'a benzediginden programcilar yabancilik cekmeyecektir. Bu ifadelerin bir switch-case blogunda kullanilmasi da mumkun (bu onceden kodla tasarlanan guvenli enum siniflari icin mumkun degildi)
enum Tip {
maca, sinek, karo, kupa }
enum Deger {
ikili, uclu, dortlu, besli, altili, yedili,
sekizli, dokuzlu, onlu, vale, kiz, papaz, as
}
// desteye kartlari ekle List
for (Tip tip : Tip.VALUES)
for (Deger deger : Deger.VALUES)
deste.add(new Kart(Tip, Deger));
// desteyi karistir
Collections.shuffle(deste);
Baska bir ornek, bu defa enum sinif oalrak ifade ediliyor. icindeki bilesenlere deger atanabiliyor. Goruldugu gibi sebze enum sinifinda hem sebzeler, hem sebzelerin fiyatlari yuklenebiliyor. Ayrica bu sinifi kullanan yazilimin ikinci parcasinda enum sinifinin switch blogunda nasil kullanilacagi gosteriliyor.
public enum Sebze {
domates(500), salatalik(550), biber(1000), patlican(700);
Sebze( int fiyat) {
this.fiyat = fiyat;
}
private final int fiyat;
public int fiyat () { return fiyat;
}
}
public class SebzeTest { public static void main(String[] args) {
for (Sebze s : Sebze.VALUES)
System.out.println(s + ": \t"
+ s.value() + "bin TL \t" + renk
(s));
}
private enum SebzeRengi {
kirmizi, yesil, mor
}
private static SebzeRengi renk(Sebze s) {
switch (s) {
case domates:
return SebzeRengi.kirmizi;
case patlican:
return SebzeRengi.mor;
case salatalik:
case biber:
return SebzeRengi.yesil;
default:
throw new AssertionError("Bilinmeyen sebze: " + s); }
}
}
Hiç yorum yok:
Yorum Gönder