Java/Recursos da Linguagem/Enums
Java⏱ ~2 min de leitura

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.

Exemplo.java
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());
}
💡 Dica pro

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.

Recompensa+25 XP+exercícios