Enums no Java

Aprenda nesse microexemplo como criar e utilizar enums no Java. Confira como esse poderoso recurso permite a definição de um conjunto limitado de valores para uma variável.

#PraCegoVer - Transcrição dos Slides Um curso possui um turno: manhã, tarde ou noite
Qual seria o tipo adequado para o campo turno? Se turno é uma string, seus valores podem ser manhça, tarde , noite, margarina, azul.... Se turno é um inteiro, seus valores podem ser 1, 2, -999, -2, 0...
Turno tem valores conhecidos. Um turno deve ser manhã, tarde ou noite. Se declararmos Turno como enum, limitamos seus valores a um pequeno conjunto de constantes: MANHA, TARDE ou NOITE
Ir para o código

Criando uma primeira enum

Em Java, uma enum é um tipo no qual declaramos um conjunto de valores constantes pré-definidos. Sua sintaxe é muito semelhante à declaração de uma classe, exceto pelo uso da palavra chave enum que antecede seu nome.

Abaixo apresentamos como declarar a enum Turno:

public enum Turno { MANHA, TARDE, NOITE; }

Por serem os campos de uma enum constantes, seus nomes são escritos em letras maiúsculas. No exemplo acima temos três campos que correspondem aos turnos manhã, tarde e noite.

Para atribuir um desses valores a uma variável podemos fazer como no código abaixo:

Turno turno = Turno.MANHA;

Perceba que ao utilizar enums limitamos os valores que podem ser atribuídos a uma variável. Sendo assim, devemos atribuir ao campo Turno um dos valores pré-definidos na enum Turno.

Classes enum e herança

Ao declarar uma enum estamos implicitamente estendendo a classe java.lang.Enum. Isso cria algumas limitações, porque o Java não suporta herança múltipla, o que impede uma classe enum de estender outras classes. Porém, uma classe enum pode ter propriedades, assim como um construtor e um método.

O código abaixo apresenta uma segunda versão da enum Turno, agora com a propriedade descrição, um construtor, que inicia essa propriedade, além de um método para retornar essa descrição:

public enum Turno { MANHA("manhã"), TARDE("tarde"), NOITE("noite"); private String descricao; Turno(String descricao) { this.descricao = descricao; } public String getDescricao() { return descricao; } }

O construtor de uma enum é sempre privado, não podendo ser invocado diretamente. Nele são iniciados todos os campos, que por serem constantes devem declarados antes das propriedades e do construtor da classe.

Métodos herdados de Enum

Uma vez que Turno herda de Enum, possui métodos declarados na classe pai. Um dos mais utilizados dentre eles é values(), que retorna um array contendo todos os campos da enum.

No exemplo a seguir imprimimos a descrição de cada um dos campos da enum Turno:

for (Turno t : Turno.values()) { System.out.println(t.getDescricao()); }

Outros métodos úteis dessa classe são as apresentadas na Tabela 1:

Método Retorno Descrição
toString() String Retorna uma String com o nome da instância (em maiúsculas).
valueOf(String nome) static <T extends Enum<T>>
T
Retorna o objeto da classe enum cujo nome é a string do argumento.
ordinal() int Retorna o número de ordem do objeto na enumeração.

Tabela 1. Métodos úteis da classe

Ir para o código

Artigos relacionados