Javaya enum yapisi 1.5 versiyonundan sonra geldi.enum'lar normal siniflara benze ama bircok kisitlama getirilmistir. enum yapisi olusturulmada evel static final int seklinde tanimlanan degiskenler tanimlaniyordu ama bu bir cok sorunun cikmasina neden oluyordu. Aslinda enum tanimini yapmak yrine enum'larin nasil kullanildigi ile ilgili uygulamalar ile anlatma istiyorum.
Javada enum tanimlamak icin enum keyword yararlanilir. Daha sonra enum elemanlari {} arasina yazilir.
public enum Sebzeler {
DOMATEZ,BIBER,PATLICAN,SALATALIK
}
DOMATEZ,BIBER,PATLICAN,SALATALIK
}
Yukarda bir enum tanimladik simdi biraz daha ilerleyere bu enumdaki degerleri nasil alabiliriz.
public class TestMain {
public static void main(String args[]) {
System.out.println(Sebzeler.DOMATEZ);
System.out.println(Sebzeler.BIBER);
System.out.println(Sebzeler.PATLICAN);
System.out.println(Sebzeler.SALATALIK);
}
}
public static void main(String args[]) {
System.out.println(Sebzeler.DOMATEZ);
System.out.println(Sebzeler.BIBER);
System.out.println(Sebzeler.PATLICAN);
System.out.println(Sebzeler.SALATALIK);
}
}
//Console Output
DOMATEZ
BIBER
PATLICAN
SALATALIK
BIBER
PATLICAN
SALATALIK
Simdide enum icindeki methodlari inceliyelim
values() : Enum'daki elemanlari bir dizi seklinde elde etmemizi sagliyor
public class TestMain {
public static void main(String args[]) {
for (Sebzeler s : Sebzeler.values()) {
System.out.println(s.ordinal());
}
}
}
public static void main(String args[]) {
for (Sebzeler s : Sebzeler.values()) {
System.out.println(s.ordinal());
}
}
}
//Console Output
DOMATEZ
BIBER
PATLICAN
SALATALIK
BIBER
PATLICAN
SALATALIK
ordinal() : Isetile bir enum elemanin kacinci sirada oldugunu bildirir. burada ilk deger sifirdan basliyor.
public class TestMain {
public static void main(String args[]) {
System.out.println(Sebzeler.BIBER.ordinal());
System.out.println(Sebzeler.DOMATEZ.ordinal());
System.out.println(Sebzeler.SALATALIK.ordinal());
System.out.println(Sebzeler.PATLICAN.ordinal());
}
}
public static void main(String args[]) {
System.out.println(Sebzeler.BIBER.ordinal());
System.out.println(Sebzeler.DOMATEZ.ordinal());
System.out.println(Sebzeler.SALATALIK.ordinal());
System.out.println(Sebzeler.PATLICAN.ordinal());
}
}
//Console Output
1
0
3
2
0
3
2
valueOf(String name) :Enum isindeki elemanlarin ismini biliyorsak valueOf methodunun parametresine istenilen enum elemanin adini yazarak elde edebiliriz.
public class TestMain {
public static void main(String args[]) {
for (Sebzeler s : Sebzeler.values()) {
System.out.println(Sebzeler.valueOf(s.name()));
}
}
}
public static void main(String args[]) {
for (Sebzeler s : Sebzeler.values()) {
System.out.println(Sebzeler.valueOf(s.name()));
}
}
}
//Console Output
DOMATEZ
BIBER
PATLICAN
SALATALIK
BIBER
PATLICAN
SALATALIK
Yada bu methodun daha iyi anlasilmasi icin sunu yapabiliriz
public class TestMain {
public static void main(String args[]) {
System.out.println(Sebzeler.valueOf("BIBER"));
}
}
public static void main(String args[]) {
System.out.println(Sebzeler.valueOf("BIBER"));
}
}
//Console Output
BIBER
Simdide enumlar ile ilgili farkli noktalara deyinelim
- Enum elemanlarinin deger almasi ve bu degerlerini kullanilmasi
public enum Sebzeler {
DOMATEZ(100), BIBER(200), PATLICAN(300), SALATALIK(400);
int fiyat;
Sebzeler(int fiyat) {
this.fiyat = fiyat;
}
}
DOMATEZ(100), BIBER(200), PATLICAN(300), SALATALIK(400);
int fiyat;
Sebzeler(int fiyat) {
this.fiyat = fiyat;
}
}
Yukarida enum elemanlarina deger verdim ama bu degerleri Constructor parametre degeri ne ise elemanlarda o tipte degerler aliyor.
public class TestMain {
public static void main(String args[]) {
for (Sebzeler f : Sebzeler.values()) {
System.out.println(f.name() +" : "+f.fiyat);
}
}
}
public static void main(String args[]) {
for (Sebzeler f : Sebzeler.values()) {
System.out.println(f.name() +" : "+f.fiyat);
}
}
}
//Console Output
DOMATEZ : 100
BIBER : 200
PATLICAN : 300
SALATALIK : 400
BIBER : 200
PATLICAN : 300
SALATALIK : 400
public enum Sebzeler {
DOMATEZ("Kirmizi"), BIBER("Yesil"), PATLICAN("Siyah"), SALATALIK("Yesil");
DOMATEZ("Kirmizi"), BIBER("Yesil"), PATLICAN("Siyah"), SALATALIK("Yesil");
String renkler;
Sebzeler(String renkler) {
this.renkler = renkler;
}
}
public class TestMain {
public static void main(String args[]) {
for (Sebzeler f : Sebzeler.values()) {
System.out.println(f.name() +" : "+f.renkler);
}
}
}
public static void main(String args[]) {
for (Sebzeler f : Sebzeler.values()) {
System.out.println(f.name() +" : "+f.renkler);
}
}
}
//Console Output
DOMATEZ : Kirmizi
BIBER : Yesil
PATLICAN : Siyah
SALATALIK : Yesil
BIBER : Yesil
PATLICAN : Siyah
SALATALIK : Yesil
- Simdide enum elemanlarina method ekleme islemine geciyoruz
public enum Hesapla {
TOPLA{ double islem(double x, double y) { return x + y; } },
CIKAR{ double islem(double x, double y) { return x - y; } },
CARP { double islem(double x, double y) { return x * y; } },
BOL { double islem(double x, double y) { return x / y; } };
abstract double islem(double x, double y);
}
TOPLA{ double islem(double x, double y) { return x + y; } },
CIKAR{ double islem(double x, double y) { return x - y; } },
CARP { double islem(double x, double y) { return x * y; } },
BOL { double islem(double x, double y) { return x / y; } };
abstract double islem(double x, double y);
}
public class TestMain {
public static void main(String args[]) {
System.out.println("2 + 3 : "+Hesapla.TOPLA.islem(2, 3));
}
}
public static void main(String args[]) {
System.out.println("2 + 3 : "+Hesapla.TOPLA.islem(2, 3));
}
}
//Console Output
2 + 3 : 5.0
- Enum'lar kalitim yetenegine sahip degiller
- Enum'larin Constructor public olamaz.
- Enum yapisi interface'yi implement edebilir.
Az once yaptigimiz Hesapla enum'unu interface yetenegi ile beraber yapalim
public interface Hesap {
double islem(double x, double y);
}
double islem(double x, double y);
}
public enum Hesapla implements Hesap {
TOPLA{
@Override
public double islem(double x, double y) {
return x + y;
}
},
CIKAR{
@Override
public double islem(double x, double y) {
return x - y;
}
},
CARP{
@Override
public double islem(double x, double y) {
return x * y;
}
},
BOL{
@Override
public double islem(double x, double y) {
return x / y;
}
};
}
TOPLA{
@Override
public double islem(double x, double y) {
return x + y;
}
},
CIKAR{
@Override
public double islem(double x, double y) {
return x - y;
}
},
CARP{
@Override
public double islem(double x, double y) {
return x * y;
}
},
BOL{
@Override
public double islem(double x, double y) {
return x / y;
}
};
}
public class TestMain {
public static void main(String args[]) {
System.out.println("2 + 3 : "+Hesapla.TOPLA.islem(2, 3));
System.out.println("2 * 3 : "+Hesapla.CARP.islem(2, 3));
System.out.println("2 - 3 : "+Hesapla.CIKAR.islem(2, 3));
}
}
public static void main(String args[]) {
System.out.println("2 + 3 : "+Hesapla.TOPLA.islem(2, 3));
System.out.println("2 * 3 : "+Hesapla.CARP.islem(2, 3));
System.out.println("2 - 3 : "+Hesapla.CIKAR.islem(2, 3));
}
}
//Console Output
2 + 3 : 5.0
2 * 3 : 6.0
2 - 3 : -1.0
2 * 3 : 6.0
2 - 3 : -1.0
Yukeridaki interface kullanarak yazdigim ornegi bir baska sekilde kullanimi
public class TestMain {
public static void main(String args[]) {
for(Hesapla h : Hesapla.values()){
System.out.println(h.name() +" : "+ h.islem(4, 2));
}
}
}
public static void main(String args[]) {
for(Hesapla h : Hesapla.values()){
System.out.println(h.name() +" : "+ h.islem(4, 2));
}
}
}
//Console Output
TOPLA : 6.0
CIKAR : 2.0
CARP : 8.0
BOL : 2.0
CIKAR : 2.0
CARP : 8.0
BOL : 2.0
- Enum konusunu inceliyorken EnumSet sinifinida incelemeden gecemiyecem
public enum Gunler {
PAZARTESI("Monday") , SALI("Tuesday") , CARSAMBA("Wednesday") , PERSEMBE("Thursday") , CUMA("Friday") , CUMARTESI("Saturday") , PAZAR("Sunday");
String eng;
Gunler(String eng){
this.eng = eng;
}
}
PAZARTESI("Monday") , SALI("Tuesday") , CARSAMBA("Wednesday") , PERSEMBE("Thursday") , CUMA("Friday") , CUMARTESI("Saturday") , PAZAR("Sunday");
String eng;
Gunler(String eng){
this.eng = eng;
}
}
public class TestMain {
public static void main(String args[]) {
EnumSet d = EnumSet.range(Gunler.PAZARTESI, Gunler.PERSEMBE);
System.out.println(d);
}
}
public static void main(String args[]) {
EnumSet
System.out.println(d);
}
}
//Console Output
[PAZARTESI, SALI, CARSAMBA, PERSEMBE]
public class TestMain {
public static void main(String args[]) {
EnumSet d = EnumSet.allOf(Gunler.class);
for(Gunler g: d.clone()){
System.out.println(g);
}
}
}
public static void main(String args[]) {
EnumSet
for(Gunler g: d.clone()){
System.out.println(g);
}
}
}
//Console Output
PAZARTESI
SALI
CARSAMBA
PERSEMBE
CUMA
CUMARTESI
PAZAR
SALI
CARSAMBA
PERSEMBE
CUMA
CUMARTESI
PAZAR
public class TestMain {
public static void main(String args[]) {
for(Gunler g: EnumSet.allOf(Gunler.class)){
System.out.println(g);
}
}
}
//Console Output
PAZARTESI
SALI
CARSAMBA
PERSEMBE
CUMA
CUMARTESI
PAZAR
SALI
CARSAMBA
PERSEMBE
CUMA
CUMARTESI
PAZAR
public class TestMain {
public static void main(String args[]) {
for(Gunler g : EnumSet.of(Gunler.PAZARTESI, Gunler.CUMA)){
System.out.println(g);
}
}
}
public static void main(String args[]) {
for(Gunler g : EnumSet.of(Gunler.PAZARTESI, Gunler.CUMA)){
System.out.println(g);
}
}
}
//Console Output
PAZARTESI
CUMA
CUMA
public class TestMain {
public static void main(String args[]) {
EnumSet es = EnumSet.allOf(Gunler.class);
EnumSet e= EnumSet.complementOf(es);
e.add(Gunler.SALI);
System.out.println(e);
}
}
public static void main(String args[]) {
EnumSet
EnumSet
e.add(Gunler.SALI);
System.out.println(e);
}
}
//Console Output
[SALI]
public class TestMain {
public static void main(String args[]) {
System.out.println(EnumSet.noneOf(Gunler.class));
}
}
public static void main(String args[]) {
System.out.println(EnumSet.noneOf(Gunler.class));
}
}
//Console Output
[]
No comments:
Post a Comment