Menu
Coddy logo textTech

Enums e Métodos de Enum

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 50 de 87.

Um enum (enumeração) é um tipo especial de classe que representa um conjunto fixo de constantes. Em vez de usar inteiros ou strings arbitrários para representar opções como dias da semana ou status de pedidos, os enums fornecem valores legíveis e seguros quanto ao tipo.

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

Day today = Day.MONDAY;
System.out.println(today);  // Imprime: MONDAY

Enums são mais do que simples constantes: são classes completas. Você pode adicionar campos, construtores e métodos a elas:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // Imprime: 20

Todo enum vem com métodos integrados úteis. O método values() retorna um array de todas as constants, enquanto valueOf() converte uma string na enum correspondente. O método ordinal() retorna a posição da constant (começando em 0):

for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // Converte string para enum

Enums são ideais quando você tem um conjunto conhecido e fixo de valores que não mudará em tempo de execução, tornando seu código mais seguro e expressivo do que usar constantes simples.

challenge icon

Desafio

Fácil

Vamos criar um sistema de pedidos de uma cafeteria que demonstra o poder de enums com campos, construtores e métodos. Você criará um enum CoffeeSize que armazena informações de preços e um sistema para processar pedidos de clientes.

Você organizará seu código em três arquivos:

  • CoffeeSize.java: Crie um enum que represente os tamanhos de café com seus respectivos preços. Seu enum deve ter três constantes: SMALL, MEDIUM e LARGE, com preços de 2.50, 3.50 e 4.50, respectivamente.

    Cada tamanho precisa de um campo privado price (double), um construtor para defini-lo e um método getPrice() para obtê-lo. Adicione também um método getDescription() que retorne uma string no formato: [size name] - $[price] (por exemplo: SMALL - $2.5)

  • Order.java: Crie uma classe que represente um pedido de café. Um Order tem dois campos privados: customerName (String) e size (CoffeeSize). Inclua um construtor para inicializar ambos os campos e métodos getter para cada um.

    Adicione um método getReceipt() que retorne uma string com várias linhas:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: Dê vida à sua cafeteria! Você receberá duas entradas: um nome de cliente (String) e um nome de tamanho (String como "SMALL", "MEDIUM" ou "LARGE").

    Primeiro, use CoffeeSize.valueOf() para converter a string do tamanho na constante de enum correspondente. Crie um Order com o nome do cliente e o tamanho e, em seguida, imprima o recibo.

    Depois de imprimir o recibo, imprima uma linha vazia e, então, exiba o menu completo iterando por todos os valores de CoffeeSize usando o método values(). Para cada tamanho, imprima sua descrição em uma linha separada.

Você receberá duas entradas na ordem: nome do cliente e nome do tamanho (um entre "SMALL", "MEDIUM" ou "LARGE").

Observe como o enum encapsula tanto a identidade do tamanho quanto seu preço associado, de forma muito mais organizada do que usar constantes separadas ou números mágicos em todo o código!

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler entradas
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: Converta sizeName para o enum CoffeeSize usando valueOf()
        
        // TODO: Crie um Order com o nome do cliente e o tamanho
        
        // TODO: Imprima o recibo
        
        // TODO: Imprima uma linha vazia
        
        // TODO: Exiba o menu completo iterando por todos os valores de CoffeeSize
        // Dica: Use CoffeeSize.values() para obter todas as constantes do enum
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Java online