Skip to content

Instantly share code, notes, and snippets.

@antonmry
Last active October 12, 2025 12:39
Show Gist options
  • Save antonmry/5b90ae04a46411227fe9a6b29f9233c8 to your computer and use it in GitHub Desktop.
Save antonmry/5b90ae04a46411227fe9a6b29f9233c8 to your computer and use it in GitHub Desktop.
Ejemplo del nuevo switch exhaustivo
enum TipoHabitacion {
// Esta es la clave: qué pasa cuando añades un nuevo tipo de habitación?
//Free(0.0f),
Lowcost(50.0f),
Doble(100.0f),
Suite(200.0f);
private final float coste;
TipoHabitacion(float c) {
this.coste = c;
}
public float getPrice() {
return this.coste;
}
}
public class GestionHabitaciones {
public static String getDescripcionMal(TipoHabitacion habitacion) {
String descripcion = "bug";
switch (habitacion) {
case Lowcost:
descripcion = "La opción más económica. Precio: " + habitacion.getPrice() + "€";
break;
case Doble:
descripcion = "Habitación estándar doble. Precio: " + habitacion.getPrice() + "€";
break;
case Suite:
descripcion = "Lujo con servicios adicionales. Precio: " + habitacion.getPrice() + "€";
break;
}
// Este código devuelve un resultado incorrecto, no rompe
// ni en compilación ni en ejecución.
return descripcion;
}
public static String getDescripcionRegular(TipoHabitacion habitacion) {
return switch (habitacion) {
case Lowcost -> "La opción más económica. Precio: " + habitacion.getPrice() + "€";
case Doble -> "Habitación estándar doble. Precio: " + habitacion.getPrice() + "€";
case Suite -> "Lujo con servicios adicionales. Precio: " + habitacion.getPrice() + "€";
default -> "Caso no contemplado";
};
// El default al menos nos obliga a gestionar el caso en que aparece un
// nuevo tipo de habitación.
}
public static String getDescripcion(TipoHabitacion habitacion) {
return switch (habitacion) {
case Lowcost -> "La opción más económica. Precio: " + habitacion.getPrice() + "€";
case Doble -> "Habitación estándar doble. Precio: " + habitacion.getPrice() + "€";
case Suite -> "Lujo con servicios adicionales. Precio: " + habitacion.getPrice() + "€";
};
// Esto es lo perfecto. El programa directamente no compila, obligándonos a
// arreglarlo y haciendo imposible que se nos pase. Esa garantía no la
// tenemos si definimos esos valores en constantes, ficheros de configuración,
// o similares.
//
// Con todo, depende del contexto: si sabemos que no se van a añadir
// nuevos tipos de habitaciones, esto es algo overkill.
//
// Si el precio cambia dinámicamente, aún podemos usar esta opción pero
// sin meter el precio en el enum, usándolo solo como key para recuperar
// el precio dinámicamente.
}
public static void main(String[] args) {
System.out.println(getDescripcion(TipoHabitacion.Lowcost));
System.out.println(getDescripcion(TipoHabitacion.Doble));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment