logo

Java'da numaralandırma

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:



enum EnumName {

SABİT1 SABİT2 SABİT3;

}



Java
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.

Java
import 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

Java
enum 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.

Java
enum 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.

Java
enum 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.

Java
import 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.