logo

enum i Java

I Java er optællinger (enumer) en speciel type, der bruges til at definere en gruppe af navngivne konstanter.

  • Enums hjælper med at vedligeholde læsbarheden og typesikkerhed i programmer ved at tildele meningsfulde navne til heltalsværdier.
  • Primært nyttigt, når vi har et lille sæt af mulige værdier for en vare, såsom rutevejledninger, ugedage osv.

Oprettelse af en enum

Syntaks:

enum EnumName {



KONSTANT1 KONSTANT2 KONSTANT3;

}

Java
enum TrafficLight {  RED GREEN YELLOW; } public class Test{    public static void main(String[] args){    TrafficLight x = TrafficLight.RED;  System.out.println(x);  } } 

Produktion
RED 

Erklæring om enum i Java

Enum-deklaration kan udføres uden for en klasse eller inde i en klasse, men ikke inde i en metode.

1. Erklæring uden for klassen

Som vi har set i ovenstående eksempel kan enums erklæres uden for en klasse og tilgås direkte

2. Erklæring inde i en klasse

Enums kan også erklæres inde i en klasse, men ikke inde i en metode.

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);  } } 

Produktion
RED 

Egenskaber for Enum i Java

Der er visse egenskaber efterfulgt af Enum som nævnt nedenfor:

  • Klassetype: Internt implementeret som en klasse.
  • Enum-konstanter: Hver konstant er et objekt af enum-typen.
  • Switch Support: Kan bruges i switch-udsagn.
  • Implicitte modifikatorer: Konstanter er offentlige statiske endelige.
  • Arv: Enums kan ikke udvide klasser, men kan implementere grænseflader.

Enum i en Switch Statement

Enums kan bruges i switch-sætninger til at håndtere forskellige tilfælde baseret på enum-konstanterne.

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');  }  } } 

Produktion
Other color 

Enum med metoder og konstruktør

Enums kan have konstruktører og metoder udført separat for hver konstant

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();  } } 

Produktion
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED 

Enum med abstrakte metoder

Enums kan erklære abstrakte metoder, som hver konstant skal implementere.

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());  } } 

Produktion
1st day 5th day 

Iteration af enums ved hjælp af værdier()

Brug EnumType.values() til at gennemgå alle enum-konstanter.

Java
enum Color{  RED GREEN BLUE;   } public class Test{    public static void main(String[] args){    for (Color c : Color.values()){    System.out.println(c);  }  } } 

Produktion
RED GREEN BLUE 

Enum og EnumSet (Specific Range Iteration)

EnumSet.range() tillader iteration over et specifikt område af enum-konstanter.

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);  }  } } 

Produktion
TUESDAY WEDNESDAY THURSDAY FRIDAY 

Oprettelse af en klasse med et Enum-medlem

Vi kan kombinere enums med almindelige klasser for at organisere din programlogik. En enum kan være en medlemsvariabel i en klasse, og metoder kan udføre handlinger baseret på enum-værdien.

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();  } } 

Produktion
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest 

Forklaring:

  • EnumTest-klassen i ovenstående kode er oprettet med medlem af typen Day. Den har en konstruktør, der tager Day enum som et argument og tildeler det.
  • Klassen har metode tellItLikeItIs() som udskriver besked baseret på værdien af ​​dagen.
  • Hovedmetoden inkluderer objekter fra EnumTest, der bruger forskellige Day enum-værdier og kalder tellItLikeItIs()-metoden på hver.

NOTE: Det nye nøgleord bruges, fordi EnumTest er en almindelig klasse, ikke en enum, så vi opretter forekomster og sender enum-værdien til dens konstruktør.