logo

enumeració en Java

A Java, les enumeracions (enums) són un tipus especial utilitzat per definir un grup de constants anomenades.

  • Les enumeracions ajuden a mantenir la llegibilitat i la seguretat de tipus als programes assignant noms significatius a valors enters.
  • Principalment útil quan tenim un petit conjunt de valors possibles per a un element com les indicacions dies de la setmana, etc.

Creació d'una enumeració

Sintaxi:

cua i cua de prioritat a java

enumeració EnumName {



CONSTANT1 CONSTANT2 CONSTANT3;

}

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

Sortida
RED 

Declaració d'enum en Java

La declaració d'enum es pot fer fora d'una classe o dins d'una classe, però no dins d'un mètode.

1. Declaració fora de la classe

Com hem vist a l'exemple anterior, les enumeracions es poden declarar fora d'una classe i accedir-hi directament

2. Declaració dins d'una classe

Les enumeracions també es poden declarar dins d'una classe però no dins d'un mètode.

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

Sortida
RED 

Propietats d'Enum a Java

Hi ha certes propietats seguides d'Enum, com s'esmenta a continuació:

  • Tipus de classe: Implementat internament com a classe.
  • Constants d'enumeració: Cada constant és un objecte del tipus enumeració.
  • Suport de canvi: Es pot utilitzar en declaracions de commutació.
  • Modificadors implícits: Les constants són públiques estàtiques finals.
  • Herència: Les enumeracions no poden estendre les classes, però poden implementar interfícies.

Enum en una declaració Switch

Les enumeracions es poden utilitzar en declaracions de commutació per gestionar diferents casos basats en les constants enumeracions.

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

Sortida
Other color 

Enum amb mètodes i constructor

Les enumeracions poden tenir constructors i mètodes executats per separat per a cada constant

què és myspace
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();  } } 

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

Enumeració amb mètodes abstractes

Els enumeradors poden declarar mètodes abstractes que cada constant ha d'implementar.

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

Sortida
1st day 5th day 

Iteració de enumeracions utilitzant values()

Utilitzeu EnumType.values() per recórrer totes les constants d'enumeració.

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

Sortida
RED GREEN BLUE 

Enum i EnumSet (iteració d'interval específic)

EnumSet.range() permet la iteració sobre un rang específic de constants d'enumeració.

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

Sortida
TUESDAY WEDNESDAY THURSDAY FRIDAY 

Creació d'una classe amb un membre Enum

Podem combinar enumeracions amb classes regulars per organitzar la lògica del vostre programa. Una enumeració pot ser una variable membre d'una classe i els mètodes poden realitzar accions basades en el valor d'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();  } } 

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

Explicació:

  • La classe EnumTest del codi anterior es crea amb un membre del tipus Day. Té un constructor que pren Day enum com a argument i l'assigna.
  • La classe té el mètode tellItLikeItIs() que imprimeix el missatge en funció del valor del dia.
  • El mètode principal inclou objectes d'EnumTest utilitzant diferents valors d'enumeració de dia i cridant al mètode tellItLikeItIs() a cadascun.

NOTA: La paraula clau nova s'utilitza perquè EnumTest és una classe normal, no una enumeració, de manera que creem instàncies i passem el valor d'enum al seu constructor.

multiplexor de dos a un