Da trilha de Java Este conceito ainda não saiu como card do dia. ir para o card de hoje

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.
  • switch com enum é seguro e pode usar a sintaxe de seta (->) desde o Java 14.
  • EnumMap é um Map otimizado para chaves enum, mantendo a ordem natural.
ExemploEnum.java
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"));
        }
    }
}

Exercícios

  1. 1
    Fácil

    Enum simples com método

    Crie um enum NivelAcesso com as constantes ADMIN, USUARIO e CONVIDADO. Cada constante deve ter um campo nivel (int) e um método getNivel(). No main, percorra todas as constantes com values() e imprima nome - nivel.

    Resolver
  2. 2
    Médio

    Switch com enum e EnumMap

    Crie um enum StatusPedido com PENDENTE, PROCESSANDO, ENVIADO e ENTREGUE. Use um switch com seta para imprimir uma mensagem para cada status. Depois, crie um EnumMap<StatusPedido, Integer> que conta quantos pedidos existem em cada status, preencha com valores e imprima o total por status.

    Resolver
  3. 3
    Desafio

    Enum com método abstrato e agrupamento com EnumMap

    Crie um enum Operacao com SOMA, SUBTRACAO, MULTIPLICACAO e DIVISAO. Cada constante deve implementar um método abstrato double aplicar(double a, double b). No main, use um EnumMap<Operacao, Double> para armazenar o resultado de aplicar cada operação a 10 e 2. Imprima cada operação e seu resultado no formato OPERACAO: resultado.

    Resolver

Continue estudando