logo

enum v Jave

V Java sú enumerácie (enumy) špeciálnym typom používaným na definovanie skupiny pomenovaných konštánt.

  • Enumy pomáhajú pri udržiavaní čitateľnosti a bezpečnosti typov v programoch priraďovaním zmysluplných názvov k celočíselným hodnotám.
  • Je to užitočné najmä vtedy, keď máme malú množinu možných hodnôt pre položku, ako sú dni v týždni atď.

Vytvorenie Enum

Syntax:



reakčná tabuľka

enum Názov_čísla {

CONSTANT1 CONSTANT2 CONSTANT3;

}



metódy v jazyku Java
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 

Deklarácia enum v Jave

Deklaráciu enum možno vykonať mimo triedy alebo vnútri triedy, ale nie vo vnútri metódy.

1. Vyhlásenie mimo triedy

Ako sme videli vo vyššie uvedenom príklade, zoznamy môžu byť deklarované mimo triedy a prístupné priamo

2. Deklarácia v triede

Enumy môžu byť deklarované aj v rámci triedy, ale nie v rámci metódy.



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 Jave

Existujú určité vlastnosti, za ktorými nasleduje Enum, ako je uvedené nižšie:

rok na štvrťroky
  • Typ triedy: Interne implementované ako trieda.
  • Konštanty Enum: Každá konštanta je objektom typu enum.
  • Podpora prepínačov: Môže byť použitý v príkazoch switch.
  • Implicitné modifikátory: Konštanty sú verejné statické konečné.
  • Dedičnosť: Enumy nemôžu rozširovať triedy, ale môžu implementovať rozhrania.

Enum v príkaze Switch

Enumy možno použiť v príkazoch switch na spracovanie rôznych prípadov na základe enumových konštánt.

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 metódami a konštruktorom

Enumy môžu mať konštruktory a metódy spustené samostatne pre každú konštantu

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 metódami

Enumy môžu deklarovať abstraktné metódy, ktoré musí implementovať každá konštanta.

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 

Iterácia enumov pomocou hodnôt ()

Použite EnumType.values() na zacyklenie všetkých konštánt enum.

pothineni baran
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 (špecifická iterácia rozsahu)

EnumSet.range() umožňuje iteráciu cez špecifický rozsah enumových konštánt.

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 

Vytvorenie triedy s členom Enum

Môžeme kombinovať enumy s bežnými triedami, aby sme organizovali logiku vášho programu. Enum môže byť členskou premennou v triede a metódy môžu vykonávať akcie na základe hodnoty enum.

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 

Vysvetlenie:

  • Trieda EnumTest vo vyššie uvedenom kóde je vytvorená s členom typu Day. Má konštruktor, ktorý vezme Day enum ako argument a priradí ho.
  • Trieda má metódu tellItLikeItIs(), ktorá vypíše správu na základe hodnoty dňa.
  • Hlavná metóda zahŕňa objekty EnumTest pomocou rôznych hodnôt Day enum a volaním metódy tellItLikeItIs() pre každý z nich.

POZNÁMKA: Nové kľúčové slovo sa používa, pretože EnumTest je bežná trieda, nie enum, takže vytvárame inštancie a odovzdávame hodnotu enum jeho konštruktorovi.