enum em Java

Em Java, enumerações (enums) são um tipo especial usado para definir um grupo de constantes nomeadas.

  • Enums ajudam na manutenção da legibilidade e na segurança de tipo em programas, atribuindo nomes significativos a valores inteiros.
  • Útil principalmente quando temos um pequeno conjunto de valores possíveis para um item, como direções, dias da semana, etc.

Criando um Enum

Sintaxe:

enum NomeEnum {

CONSTANTE1 CONSTANTE2 CONSTANTE3;

}

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

Saída
RED  

Declaração de enum em Java

A declaração de enum pode ser feita fora de uma classe ou dentro de uma classe, mas não dentro de um método.

1. Declaração fora da aula

Como vimos no exemplo acima, enumerações podem ser declaradas fora de uma classe e acessadas diretamente

2. Declaração dentro de uma classe

Enums também podem ser declarados dentro de uma classe, mas não dentro de um método.

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

Saída
RED  

Propriedades de Enum em Java

Existem certas propriedades seguidas por Enum conforme mencionado abaixo:

  • Tipo de aula: Implementado internamente como uma classe.
  • Constantes Enum: Cada constante é um objeto do tipo enum.
  • Suporte para troca: Pode ser usado em instruções switch.
  • Modificadores implícitos: Constantes são finais estáticos públicos.
  • Herança: Enums não podem estender classes, mas podem implementar interfaces.

Enum em uma instrução Switch

Enums podem ser usados ​​em instruções switch para lidar com diferentes casos com base nas constantes 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'  );      }      }   }   

Saída
Other color  

Enum com métodos e construtor

Enums podem ter construtores e métodos executados separadamente para cada constante

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

Saída
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED  

Enum com métodos abstratos

Enums podem declarar métodos abstratos que cada constante deve 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  ());      }   }   

Saída
1st day 5th day  

Iterando Enums usando valores()

Use EnumType.values() para percorrer todas as constantes enum.

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

Saída
RED GREEN BLUE  

Enum e EnumSet (iteração de intervalo específico)

EnumSet.range() permite a iteração em um intervalo específico de constantes enum.

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

Saída
TUESDAY WEDNESDAY THURSDAY FRIDAY  

Criando uma classe com um membro Enum

Podemos combinar enums com classes regulares para organizar a lógica do seu programa. Um enum pode ser uma variável membro em uma classe e os métodos podem executar ações com base no valor do 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  ();      }   }   

Saída
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest  

Explicação:

  • A classe EnumTest no código acima é criada com um membro do tipo Day. Possui construtor que usa Day enum como argumento e o atribui.
  • A classe possui o método TellItLikeItIs() que imprime a mensagem com base no valor do dia.
  • O método principal inclui objetos de EnumTest usando diferentes valores de enum Day e chamando o método TellItLikeItIs() em cada um.

OBSERVAÇÃO: A palavra-chave new é usada porque EnumTest é uma classe regular e não um enum, então criamos instâncias e passamos o valor do enum para seu construtor.