Enums
Constantes tipadas e comportamento
Enums representam um conjunto fixo e finito de constantes. Em vez de usar inteiros mágicos (status = 1, 2, 3) ou Strings soltas (estado = "ATIVO"), você cria tipos expressivos e type-safe: Status.ATIVO, Status.INATIVO — o compilador verifica os valores válidos.
Em Java, Enums são classes completas. Cada constante pode ter campos e métodos próprios. Isso permite associar dados a cada valor: um enum de cargos pode guardar o salário base de cada um, um enum de dias pode indicar se é dia útil.
Enums têm métodos automáticos: values() retorna todas as constantes como array, valueOf(String) converte de string para enum, name() retorna o nome textual, e ordinal() retorna a posição (0-based). Funcionam perfeitamente em switch expressions.
public enum DiaSemana {
SEGUNDA(true, "Seg"),
TERCA(true, "Ter"),
QUARTA(true, "Qua"),
QUINTA(true, "Qui"),
SEXTA(true, "Sex"),
SABADO(false, "Sáb"),
DOMINGO(false, "Dom");
private final boolean diaUtil;
private final String abreviacao;
DiaSemana(boolean diaUtil, String abreviacao) {
this.diaUtil = diaUtil;
this.abreviacao = abreviacao;
}
public boolean isDiaUtil() { return diaUtil; }
public String getAbreviacao() { return abreviacao; }
}
// ── Uso ──────────────────────────────────────────
DiaSemana hoje = DiaSemana.SEGUNDA;
System.out.println(hoje.isDiaUtil()); // true
System.out.println(hoje.getAbreviacao()); // "Seg"
System.out.println(hoje.name()); // "SEGUNDA"
System.out.println(hoje.ordinal()); // 0
// Switch expression com enum
String mensagem = switch (hoje) {
case SABADO, DOMINGO -> "Bom descanso!";
default -> "Bom trabalho!";
};
// Iterar todos os valores
for (DiaSemana d : DiaSemana.values()) {
System.out.println(d.getAbreviacao() + ": " + d.isDiaUtil());
}Enums são singleton por natureza — cada constante tem exatamente uma instância. Podem até implementar interfaces, tornando-os extremamente versáteis para Strategy pattern.