Menu
Coddy logo textTech

Enums y métodos de Enum

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 50 de 87.

Un enum (enumeración) es un tipo de clase especial que representa un conjunto fijo de constantes. En lugar de usar enteros o cadenas arbitrarios para representar opciones como los días de la semana o los estados de los pedidos, los enums proporcionan valores legibles y seguros en cuanto al tipo.

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

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

Los enums son más que simples constantes: son clases completas. Puedes añadirles campos, constructores y métodos:

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

Cada enumeración incluye métodos integrados útiles. El método values() devuelve un arreglo de todas las constantes, mientras que valueOf() convierte una cadena en la constante de enumeración correspondiente. El método ordinal() devuelve la posición de la constante (comenzando desde 0):

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

Day day = Day.valueOf("FRIDAY");  // Convierte string a enum

Los enums son ideales cuando tienes un conjunto de valores conocido y fijo que no cambiará durante la ejecución, lo que hace que tu código sea más seguro y expresivo que usar constantes simples.

challenge icon

Desafío

Fácil

Construyamos un sistema de pedidos para una cafetería que muestre el poder de las enumeraciones con campos, constructores y métodos. Crearás una enumeración CoffeeSize que almacena información de precios y un sistema para procesar los pedidos de los clientes.

Organizarás tu código en tres archivos:

  • CoffeeSize.java: Crea una enumeración que represente los tamaños de café con sus precios asociados. Tu enumeración debe tener tres constantes: SMALL, MEDIUM y LARGE, con precios de 2.50, 3.50 y 4.50, respectivamente.

    Cada tamaño necesita un campo privado price (double), un constructor para establecerlo y un método getPrice() para recuperarlo. Añade también un método getDescription() que devuelva una cadena con el formato: [size name] - $[price] (por ejemplo: SMALL - $2.5)

  • Order.java: Crea una clase que represente un pedido de café. Un Order tiene dos campos privados: customerName (String) y size (CoffeeSize). Incluye un constructor para inicializar ambos campos y métodos getter para cada uno.

    Añade un método getReceipt() que devuelva una cadena de varias líneas:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: ¡Da vida a tu cafetería! Recibirás dos entradas: un nombre de cliente (String) y un nombre de tamaño (String como "SMALL", "MEDIUM" o "LARGE").

    Primero, usa CoffeeSize.valueOf() para convertir la cadena del tamaño en la constante de enumeración correspondiente. Crea un Order con el nombre del cliente y el tamaño, y después imprime el recibo.

    Después de imprimir el recibo, imprime una línea vacía y, a continuación, muestra el menú completo iterando por todos los valores de CoffeeSize mediante el método values(). Para cada tamaño, imprime su descripción en una línea separada.

Recibirás dos entradas en orden: el nombre del cliente y el nombre del tamaño (uno de "SMALL", "MEDIUM" o "LARGE").

Observa cómo la enumeración encapsula tanto la identidad del tamaño como su precio asociado, ¡lo que resulta mucho más limpio que usar constantes separadas o números mágicos en todo el código!

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer entradas
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: Convertir sizeName al enum CoffeeSize usando valueOf()
        
        // TODO: Crear un Order con el nombre del cliente y el tamaño
        
        // TODO: Imprimir el recibo
        
        // TODO: Imprimir una línea vacía
        
        // TODO: Mostrar el menú completo iterando a través de todos los valores de CoffeeSize
        // Hint: Usa CoffeeSize.values() para obtener todas las constantes del enum
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Java online