Java'da numaralandırmalar (numaralandırmalar), adlandırılmış sabitlerden oluşan bir grubu tanımlamak için kullanılan özel bir türdür.
- Numaralandırmalar, tamsayı değerlerine anlamlı adlar atayarak programlarda okunabilirliğin korunmasına ve tür güvenliğine yardımcı olur.
- Özellikle haftanın yol tarifi günleri vb. gibi bir öğe için küçük bir olası değerler kümesine sahip olduğumuzda kullanışlıdır.
Enum Oluşturma
Sözdizimi:
Javaenum EnumName {
SABİT1 SABİT2 SABİT3;
}
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Çıkış
RED
Java'da enum bildirimi
Enum bildirimi bir sınıfın dışında veya bir sınıfın içinde yapılabilir ancak bir yöntemin içinde yapılamaz.
1. Sınıf dışında bildirim
Yukarıdaki örnekte gördüğümüz gibi numaralandırmalar bir sınıfın dışında bildirilebilir ve doğrudan erişilebilir.
2. Sınıf içindeki bildirim
Numaralandırmalar ayrıca bir sınıf içinde de bildirilebilir ancak bir yöntemin içinde bildirilemez.
Java
public class Test { enum Color { RED GREEN BLUE; } // Driver method public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } }
Çıkış
RED
Java'da Enum'un Özellikleri
Aşağıda belirtildiği gibi Enum tarafından takip edilen belirli özellikler vardır:
- Sınıf Türü: Dahili olarak sınıf olarak uygulanır.
- Enum Sabitleri: Her sabit, enum türünün bir nesnesidir.
- Anahtar Desteği: Switch ifadelerinde kullanılabilir.
- Örtülü Değiştiriciler: Sabitler genel statik finaldir.
- Miras: Enum'lar sınıfları genişletemez ancak arayüzleri uygulayabilir.
Switch İfadesinde Enum
Enum'lar, enum sabitlerine dayalı olarak farklı durumları işlemek için switch ifadelerinde kullanılabilir.
Javaimport java.io.*; class GFG{ // Enum Declared enum Color { RED GREEN BLUE YELLOW; } public static void main(String[] args){ Color var_1 = Color.YELLOW; // Switch case with Enum switch (var_1) { case RED: System.out.println('Red color'); break; case GREEN: System.out.println('Green color'); break; case BLUE: System.out.println('Blue color'); break; default: System.out.println('Other color'); } } }
Çıkış
Other color
Yöntemler ve Yapıcı ile Enum
Numaralandırmalarda her sabit için ayrı ayrı yürütülen yapıcılar ve yöntemler bulunabilir
Javaenum Color{ RED GREEN BLUE; private Color(){ System.out.println('Constructor called for: ' + this); } public void display(){ System.out.println('Color is: ' + this); } } public class Test{ public static void main(String[] args){ Color c1 = Color.RED; c1.display(); } }
Çıkış
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Soyut Yöntemlerle Enum
Numaralandırmalar, her sabitin uygulaması gereken soyut yöntemleri bildirebilir.
Javaenum Day{ MONDAY{ public String getNumber(){ return '1st day'; } } FRIDAY{ public String getNumber(){ return '5th day'; } }; public abstract String getNumber(); } public class EnumTest { public static void main(String[] args){ System.out.println(Day.MONDAY.getNumber()); System.out.println(Day.FRIDAY.getNumber()); } }
Çıkış
1st day 5th day
Değerleri () kullanarak Numaralandırmaları Yinelemek
Tüm enum sabitleri arasında geçiş yapmak için EnumType.values() öğesini kullanın.
Javaenum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Çıkış
RED GREEN BLUE
Enum ve EnumSet (Belirli Aralık Yinelemesi)
EnumSet.range(), belirli bir numaralandırma sabiti aralığı üzerinde yinelemeye izin verir.
Javaimport java.util.EnumSet; public class EnumSetExample{ enum Day{ SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY; } public static void main(String[] args){ EnumSet<Day> workDays = EnumSet.range(Day.TUESDAY Day.FRIDAY); for (Day d : workDays){ System.out.println(d); } } }
Çıkış
TUESDAY WEDNESDAY THURSDAY FRIDAY
Enum Üyesiyle Sınıf Oluşturma
Program mantığınızı düzenlemek için numaralandırmaları normal sınıflarla birleştirebiliriz. Enum, bir sınıftaki üye değişken olabilir ve yöntemler, enum değerine dayalı eylemler gerçekleştirebilir.
Java/*package whatever //do not write package name here */ import java.io.*; enum Day { MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY } public class EnumTest { // Enum member variable Day day; // constructor which takes enum value public EnumTest(Day day) { this.day = day; } // method to execute action as per enum value public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println('Mondays are tough'); break; case TUESDAY: System.out.println('Tuesday are better'); break; case WEDNESDAY: System.out.println('Wednesday are okay'); break; case THURSDAY: System.out.println('Thursdays are hopeful'); break; case FRIDAY: System.out.println('Fridays are exciting'); break; case SATURDAY: System.out.println('Saturdays are relaxing'); break; case SUNDAY: System.out.println('Sunday are for rest'); break; default: System.out.println('Everyday are good'); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); } }
Çıkış
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Açıklama:
- Yukarıdaki koddaki EnumTest sınıfı Day tipinin üyeleriyle oluşturulmuştur. Day enum'u argüman olarak alan ve onu atayan yapıcısı vardır.
- Sınıfın, günün değerine göre mesaj basan tellItLikeItIs() yöntemi vardır.
- Ana yöntem, farklı Day enum değerleri kullanan ve her birinde tellItLikeItIs() yöntemini çağıran EnumTest nesnelerini içerir.
NOT: EnumTest bir enum değil normal bir sınıf olduğu için new anahtar sözcüğü kullanılır, bu nedenle örnekler oluştururuz ve enum değerini yapıcısına aktarırız.