Programación 3
Universidad de Alicante, 2024–2025
Tipos Enumerados en Java
Son clases que heredan de java.lang.Enum
. Las constantes
enum
son en realidad instancias (es decir, objetos).
enum Color {
, black, silver
none}
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 ) ...
.compareTo(Color.black) --> 0
c.compareTo(Color.silver) --> -1
c.compareTo(Color.none) --> 1 c
Otros 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 cero
static 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.azul
Asignació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;
.set(4); // los objetos enum son mutables
eSystem.out.println(e); // ROJO
System.out.println(e.get()); // 4
En 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).