Java Tipos Intermediário
Enums
Em Java, um enum é um tipo especial que permite definir um conjunto fixo de constantes nomeadas. Diferente de linguagens onde enums são apenas inteiros, em Java enums são classes completas: podem ter campos, construtores e métodos. Isso permite associar dados e comportamentos a cada constante, tornando o código mais seguro e expressivo.
Cada constante de um enum é uma instância única daquele tipo. Por isso, enums são ideais para representar conceitos como dias da semana, estados de um pedido ou níveis de acesso. O método estático values() retorna um array com todas as constantes na ordem de declaração, e valueOf(String) obtém a constante pelo nome.
O switch com enum é muito comum e elimina a necessidade de if-else encadeados. A partir do Java 14, a forma de seta (->) deixa o código mais limpo e sem fall-through. Além disso, a classe EnumMap é uma implementação de Map otimizada para chaves de enum, usando um array internamente para acesso rápido e ordenado.
Neste card, veremos como definir enums com campos e métodos, iterar com values(), usar switch e empregar EnumMap para agrupar dados por constante de forma eficiente.
Pontos-chave
- Enums em Java são classes; podem ter campos, construtores e métodos.
values()retorna um array com todas as constantes na ordem de declaração.switchcom enum é seguro e pode usar a sintaxe de seta (->) desde o Java 14.EnumMapé umMapotimizado para chaves enum, mantendo a ordem natural.
import java.util.EnumMap;
enum DiaSemana {
SEGUNDA("Seg", 1),
TERCA("Ter", 2),
QUARTA("Qua", 3),
QUINTA("Qui", 4),
SEXTA("Sex", 5),
SABADO("Sáb", 6),
DOMINGO("Dom", 7);
private final String abrev;
private final int numero;
DiaSemana(String abrev, int numero) {
this.abrev = abrev;
this.numero = numero;
}
public String getAbrev() { return abrev; }
public int getNumero() { return numero; }
public boolean isFimDeSemana() {
return this == SABADO || this == DOMINGO;
}
}
public class ExemploEnum {
public static void main(String[] args) {
// values() percorre todas as constantes
for (DiaSemana d : DiaSemana.values()) {
System.out.println(d + " - " + d.getAbrev() + " (" + d.getNumero() + ")");
}
// switch com enum
DiaSemana hoje = DiaSemana.QUARTA;
switch (hoje) {
case SABADO, DOMINGO -> System.out.println("Fim de semana!");
default -> System.out.println("Dia útil: " + hoje.getAbrev());
}
// EnumMap: chave = enum, valor = String
EnumMap<DiaSemana, String> tarefas = new EnumMap<>(DiaSemana.class);
tarefas.put(DiaSemana.SEGUNDA, "Reunião de equipe");
tarefas.put(DiaSemana.QUARTA, "Apresentação");
tarefas.put(DiaSemana.SEXTA, "Entrega do relatório");
for (DiaSemana d : DiaSemana.values()) {
System.out.println(d + ": " + tarefas.getOrDefault(d, "Sem tarefa"));
}
}
}