Programación 3
Universidad de Alicante, 2025–2026
Tipos Enumerados en Java
Son clases que heredan de java.lang.Enum. Las constantes
enum son en realidad instancias (es decir, objetos).
enum Color {
none, black, silver
}
Color c = Color.black;Método toString()
System.out.println(c); // equivale a System.out.println(c.toString());Métodos equals, compareTo()
if ( c.equals(Color.silver) ) ...
if ( c == Color.silver ) ...
c.compareTo(Color.black) --> 0
c.compareTo(Color.silver) --> -1
c.compareTo(Color.none) --> 1Otros métodos
ordinal()– devuelve el entero asignado por Java al valor del enum.static values()– genera un array con los valores
for (Color c : Color.values()) ...
System.out.println(c.ordinal()); // comenzando en cerostatic valueOf(String)
Color c = Color.valueOf("black");Sentencias switch
Los enums pueden usarse en los switch.
switch(c) {
case none: ...
case black: ...
}Incluir tipos enumerados
import static modelo.Color.*;no hace falta cualificar las constantes enum para usarlas.
Color c = black;Más sobre enums
Los tipos enumerados no se pueden instanciar. Supongamos que tenemos
enum Color { azul, rojo, verde }Los únicos objetos de tipo Color que existen son
Color.azul, Color.rojo, Color.verde, que son estáticos. Es
similar a crear una clase llamada Color con un constructor
privado, que contiene tres objetos (de tipo Color),
estáticos:
class Color {
public static Color azul = new Color(1);
public static Color rojo = new Color(2);
public static Color verde = new Color(3);
private int valor;
private Color(int a) { valor = a; }
}Volviendo al tipo enum Color:
Color c = new Color(azul); // da error de compilación. No se pueden instanciar enums
Color c = Color.azul; // Ok, referencia a objeto estático Color.azul
Color d = Color.azul; // ya tengo dos referencias a Color.azulAsignación de valores asociados a una constante enum
enum Color {
azul("AZUL",1), rojo("ROJO",2), verde("VERDE",3);
private int valor;
private String nombre;
// Constructor privado por definición
Color(String s, int val) { nombre = s; valor = val; }
@Override
String toString() { return nombre; }
}Esto permite asociar atributos a los objetos tipo enum.
Los tipos enumerados son mutables
Supongamos que ahora añadimos un par getter/setter:
public void setValor(int a) { valor = a; }
public int getValor() { return valor; }Entonces:
Color e = Color.rojo;
e.set(4); // los objetos enum son mutables
System.out.println(e); // ROJO
System.out.println(e.get()); // 4En resumen
Las constantes enum en Java son objetos estáticos y mutables del tipo enum definido.
Normalmente los enum se usan como objetos inmutables (lo son si no se añade algún tipo de setter como en el caso anterior).
