O Enum em Java é um tipo de dados que contém um conjunto fixo de constantes.
Pode ser usado para dias da semana (DOMINGO, SEGUNDA, TERÇA, QUARTA, QUINTA, SEXTA e SÁBADO), direções (NORTE, SUL, LESTE e OESTE), estação (PRIMAVERA, VERÃO, INVERNO e OUTONO ou OUTONO ), cores (VERMELHO, AMARELO, AZUL, VERDE, BRANCO e PRETO) etc. De acordo com as convenções de nomenclatura Java, devemos ter todas as constantes em letras maiúsculas. Portanto, temos constantes enum em letras maiúsculas.
Java Enums podem ser considerados classes que possuem um conjunto fixo de constantes (uma variável que não muda). As constantes enum Java são estáticas e finais implicitamente. Está disponível desde o JDK 1.5.
interface comparável java
Enums são usados para criar nosso próprio tipo de dados, como classes. O enumeração tipo de dados (também conhecido como tipo de dados enumerados) é usado para definir uma enumeração em Java. Ao contrário do C/C++, enum em Java é mais poderoso . Aqui, podemos definir um enum dentro ou fora da classe.
Java Enum herda internamente o Classe de enumeração , portanto não pode herdar nenhuma outra classe, mas pode implementar muitas interfaces. Podemos ter campos, construtores, métodos e métodos principais em Java enum.
Pontos a serem lembrados para Java Enum
- Enum melhora a segurança do tipo
- Enum pode ser facilmente usado no switch
- Enum pode ser percorrido
- Enum pode ter campos, construtores e métodos
- Enum pode implementar muitas interfaces, mas não pode estender nenhuma classe porque estende internamente a classe Enum
Exemplo simples de Java Enum
class EnumExample1{ //defining the enum inside the class public enum Season { WINTER, SPRING, SUMMER, FALL } //main method public static void main(String[] args) { //traversing the enum for (Season s : Season.values()) System.out.println(s); }}Teste agora
Saída:
WINTER SPRING SUMMER FALL
Vejamos outro exemplo de enum Java onde estamos usando os métodos value(), valueOf() e ordinal() de enum Java.
class EnumExample1{ //defining enum within class public enum Season { WINTER, SPRING, SUMMER, FALL } //creating the main method public static void main(String[] args) { //printing all enum for (Season s : Season.values()){ System.out.println(s); } System.out.println('Value of WINTER is: '+Season.valueOf('WINTER')); System.out.println('Index of WINTER is: '+Season.valueOf('WINTER').ordinal()); System.out.println('Index of SUMMER is: '+Season.valueOf('SUMMER').ordinal()); }}
Saída:
WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2
Nota: o compilador Java adiciona internamente os métodos values(), valueOf() e ordinal() dentro do enum em tempo de compilação. Ele cria internamente uma classe estática e final para o enum.
Qual é o propósito do métodovalues() no enum?
O compilador Java adiciona internamente o métodovalues() ao criar uma enumeração. O métodovalues() retorna um array contendo todos os valores do enum.
Qual é o propósito do método valueOf() no enum?
O compilador Java adiciona internamente o método valueOf() ao criar um enum. O método valueOf() retorna o valor de uma determinada enumeração constante.
java fatorial
Qual é o propósito do método ordinal() no enum?
O compilador Java adiciona internamente o método ordinal() ao criar um enum. O método ordinal() retorna o índice do valor enum.
Definindo Java Enum
O enum pode ser definido dentro ou fora da classe porque é semelhante a uma classe. O ponto e vírgula (;) no final das constantes enum é opcional. Por exemplo:
enum Season { WINTER, SPRING, SUMMER, FALL }
Ou,
enum Season { WINTER, SPRING, SUMMER, FALL; }
Ambas as definições de Java enum são iguais.
Exemplo de Java Enum: definido fora da classe
enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }}Teste agora
Saída:
WINTER
Exemplo de Java Enum: definido dentro da classe
class EnumExample3{ enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here public static void main(String[] args) { Season s=Season.WINTER;//enum type is required to access WINTER System.out.println(s); }}Teste agora
Saída:
WINTER
Exemplo de Java Enum: método principal dentro de Enum
Se você colocar o método main() dentro do enum, poderá executar o enum diretamente.
enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } }
Saída:
string do conversor até a data
WINTER
Inicializando valores específicos para as constantes enum
As constantes enum têm um valor inicial que começa em 0, 1, 2, 3 e assim por diante. Porém, podemos inicializar o valor específico para as constantes enum definindo campos e construtores. Conforme especificado anteriormente, Enum pode ter campos, construtores e métodos.
Exemplo de especificação do valor inicial para as constantes enum
class EnumExample4{ enum Season{ WINTER(5), SPRING(10), SUMMER(15), FALL(20); private int value; private Season(int value){ this.value=value; } } public static void main(String args[]){ for (Season s : Season.values()) System.out.println(s+' '+s.value); }}Teste agora
Saída:
WINTER 5 SPRING 10 SUMMER 15 FALL 20
O construtor do tipo enum é privado. Se você não declarar o compilador privado, criará internamente um construtor privado.
enum Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } }
Código interno gerado pelo compilador para o exemplo acima do tipo enum
final class Season extends Enum { public static Season[] values() { return (Season[])$VALUES.clone(); } public static Season valueOf(String s) { return (Season)Enum.valueOf(Season, s); } private Season(String s, int i, int j) { super(s, i); value = j; } public static final Season WINTER; public static final Season SUMMER; private int value; private static final Season $VALUES[]; static { WINTER = new Season('WINTER', 0, 10); SUMMER = new Season('SUMMER', 1, 20); $VALUES = (new Season[] { WINTER, SUMMER }); } }
Podemos criar a instância de Enum por nova palavra-chave?
Não, porque contém apenas construtores privados. |
Podemos ter um método abstrato no Enum?
Sim claro! podemos ter métodos abstratos e fornecer a implementação desses métodos.
Java Enum em uma instrução switch
Podemos aplicar enum na instrução switch como no exemplo dado:
Exemplo de aplicação de Enum em uma instrução switch
class EnumExample5{ enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} public static void main(String args[]){ Day day=Day.MONDAY; switch(day){ case SUNDAY: System.out.println('sunday'); break; case MONDAY: System.out.println('monday'); break; default: System.out.println('other day'); } }}Teste agora
Saída:
monday