logo

enum v Javě

V Javě jsou výčty (výčty) speciální typ používaný k definování skupiny pojmenovaných konstant.

  • Výčty pomáhají při čitelnosti udržovatelnosti a bezpečnosti typů v programech tím, že celočíselným hodnotám přiřazují smysluplné názvy.
  • Hlavně užitečné, když máme malou sadu možných hodnot pro položku, jako jsou dny v týdnu atd.

Vytvoření Enum

Syntax:



enum Název_výčtu {

CONSTANT1 CONSTANT2 CONSTANT3;

}



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

Výstup
RED 

Deklarace enum v Javě

Deklarace výčtu může být provedena mimo třídu nebo uvnitř třídy, ale ne uvnitř metody.

1. Prohlášení mimo třídu

Jak jsme viděli ve výše uvedeném příkladu, výčty lze deklarovat mimo třídu a přistupovat k nim přímo

2. Deklarace uvnitř třídy

Výčty lze také deklarovat uvnitř třídy, ale ne uvnitř metody.



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

Výstup
RED 

Vlastnosti Enum v Javě

Existují určité vlastnosti následované Enum, jak je uvedeno níže:

  • Typ třídy: Interně implementováno jako třída.
  • Výčtové konstanty: Každá konstanta je objekt typu enum.
  • Podpora přepínačů: Lze použít v příkazech switch.
  • Implicitní modifikátory: Konstanty jsou veřejné statické konečné.
  • Dědictví: Výčty nemohou rozšiřovat třídy, ale mohou implementovat rozhraní.

Enum v příkazu Switch

Výčty lze použít v příkazech switch ke zpracování různých případů na základě konstant výčtu.

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

Výstup
Other color 

Enum s metodami a konstruktorem

Výčty mohou mít konstruktory a metody spouštěné samostatně pro každou konstantu

java operátory
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();  } } 

Výstup
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED 

Enum s abstraktními metodami

Výčty mohou deklarovat abstraktní metody, které musí implementovat každá konstanta.

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

Výstup
1st day 5th day 

Iterace výčtů pomocí value()

Použijte EnumType.values() k procházení všech konstant výčtu.

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

Výstup
RED GREEN BLUE 

Enum a EnumSet (konkrétní iterace rozsahu)

EnumSet.range() umožňuje iteraci přes určitý rozsah výčtových konstant.

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

Výstup
TUESDAY WEDNESDAY THURSDAY FRIDAY 

Vytvoření třídy s členem Enum

Můžeme kombinovat výčty s běžnými lekcemi a organizovat tak logiku vašeho programu. Výčet může být členská proměnná ve třídě a metody mohou provádět akce na základě hodnoty výčtu.

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

Výstup
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest 

Vysvětlení:

  • Třída EnumTest ve výše uvedeném kódu je vytvořena s členem typu Day. Má konstruktor, který vezme Day enum jako argument a přiřadí jej.
  • Třída má metodu tellItLikeItIs(), která vytiskne zprávu na základě hodnoty dne.
  • Hlavní metoda zahrnuje objekty EnumTest používající různé hodnoty Day enum a volání metody tellItLikeItIs() na každém z nich.

POZNÁMKA: Nové klíčové slovo se používá, protože EnumTest je běžná třída, nikoli výčet, takže vytváříme instance a předáváme hodnotu výčtu jeho konstruktoru.