logo

enum v Javi

V Javi so enumeracije (enums) posebna vrsta, ki se uporablja za definiranje skupine poimenovanih konstant.

  • Enumi pomagajo pri vzdržljivosti berljivosti in varnosti tipov v programih z dodeljevanjem smiselnih imen celoštevilskim vrednostim.
  • Uporabno predvsem takrat, ko imamo majhen nabor možnih vrednosti za element, kot so navodila za pot, dnevi v tednu itd.

Ustvarjanje enuma

Sintaksa:



enum EnumName {

KONSTANT1 KONSTANT2 KONSTANT3;

je

}



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

Izhod
RED 

Deklaracija enum v Javi

Deklaracijo enuma lahko naredite zunaj razreda ali znotraj razreda, ne pa znotraj metode.

1. Izjava izven razreda

Kot smo videli v zgornjem primeru, je enume mogoče deklarirati zunaj razreda in do njih neposredno dostopati

2. Deklaracija znotraj razreda

Enume je mogoče deklarirati tudi znotraj razreda, ne pa tudi znotraj 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);  } } 

Izhod
RED 

Lastnosti enuma v Javi

Obstajajo nekatere lastnosti, ki jim sledi Enum, kot je navedeno spodaj:

32-bitna arhitektura proti 64-bitni
  • Vrsta razreda: Interno implementiran kot razred.
  • Enum konstante: Vsaka konstanta je objekt tipa enum.
  • Podpora stikala: Lahko se uporablja v stavkih switch.
  • Implicitni modifikatorji: Konstante so javne statične končne.
  • dedovanje: Enumi ne morejo razširiti razredov, lahko pa implementirajo vmesnike.

Enum v stavku Switch

Enume lahko uporabite v stavkih switch za obravnavanje različnih primerov na podlagi konstant enum.

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

Izhod
Other color 

Enum z metodami in konstruktorjem

Enumi imajo lahko konstruktorje in metode, ki se izvajajo ločeno za vsako konstanto

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

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

Enum z abstraktnimi metodami

Enumi lahko deklarirajo abstraktne metode, ki jih mora implementirati vsaka 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());  } } 

Izhod
1st day 5th day 

Ponavljanje enumov z uporabo values()

Uporabite EnumType.values() za zanko skozi vse enum konstante.

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

Izhod
RED GREEN BLUE 

Enum in EnumSet (iteracija določenega obsega)

EnumSet.range() omogoča iteracijo v določenem obsegu enum 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);  }  } } 

Izhod
TUESDAY WEDNESDAY THURSDAY FRIDAY 

Ustvarjanje razreda s članom Enum

Enume lahko združimo z rednimi razredi, da organiziramo logiko vašega programa. Enum je lahko spremenljivka člana v razredu, metode pa lahko izvajajo dejanja na podlagi vrednosti 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();  } } 

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

Pojasnilo:

  • Razred EnumTest v zgornji kodi je ustvarjen s članom tipa Day. Ima konstruktor, ki vzame Day enum kot argument in ga dodeli.
  • Razred ima metodo tellItLikeItIs(), ki natisne sporočilo glede na vrednost dneva.
  • Glavna metoda vključuje objekte EnumTest, ki uporabljajo različne vrednosti enum Day in za vsakega kličejo metodo tellItLikeItIs().

OPOMBA: Nova ključna beseda je uporabljena, ker je EnumTest običajni razred in ne enum, zato ustvarimo primerke in posredujemo vrednost enum njegovemu konstruktorju.

v polni obliki