Herramientas de usuario

Herramientas del sitio


clase:daw:prog:2eval:enums

10 - Enumerados

Los enumerados son una construcción del lenguaje introducida en la versión 5 de Java. Se trata de clases especiales que nos sirven para definir listas enumeradas de constantes. La única restricción que tiene los enumerados sobre las clases es que las enumeraciones no se pueden extender ya que implícitamente toda enumeración está extendiendo a la clase enums. Además, el ámbito de los constructores debe ser private o de paquete.

Creación de enumerados

Para crear una enumeración lo hacemos casi igual que una clase, con la diferencia que utilizamos la palabra reservada enum:

public enum createEnum {
    
}

Una vez creado, podemos ir añadiendo constantes a nuestra enumeración separadas por coma:

public enum createEnum {
    ENUM1,
    ENUM2,
    ENUM3
}

Por ejemplo, vamos a crear un enumerado con diferentes modelos de coches de la marca Kia:

public enum KiaModel {
    NIRO,
    XCEED,
    SPORTAGE
}

A partir de ahora, ya podemos usar nuestro enum para limitar las opciones del modelo a la hora de crear coches en nuestro sistema.

Uso de los enumerados

Una vez tenemos creado nuestro enum, para usarlo es tan sencillo como hacer referencia al nombre de la clase y la constante que queramos usar. Por ejemplo, creamos una clase llamada Kia con el siguiente código:

public class Kia {

    KiaModel model;

    public Kia(KiaModel model) {
        this.model = model;
    }

    public KiaModel getmodel() {
        return model;
    }

    public String toString(){
        return "Kia " + this.getmodel();
    }
}

Fíjate que el atributo model de nuestra clase es de tipo KiaModel (el enum que hemos creado antes) y no de tipo String. Ésto nos permite limitar los modelos de los coches a los que nosotros hemos definido. A parte de eso, la clase tiene el constructor donde le pasaremos el modelo, el getter del modelo y el método toString() para mostrar el objeto por pantalla.

Ahora, en nuestra clase principal tenemos que usar alguno de los valores del enum KiaModel cuando queramos crear un coche:

public class App {
    
    public static void main(String[] args) {
        
        Kia niro = new Kia(KiaModel.NIRO);
        Kia sportage = new Kia(KiaModel.SPORTAGE);
        Kia xceed = new Kia(KiaModel.XCEED);

        System.out.println(niro);
        System.out.println(sportage);    
        System.out.println(xceed);
    }
}

Kia NIRO
Kia SPORTAGE
Kia XCEED

Enumerados con constructor

¿Qué pasa si queremos añadir más atributos a nuestros enumerados? Para eso, podemos crear los atributos que queramos en la clase y un constructor privado donde le podemos pasar los valores adicionales que queramos. Además, en cada enumerado definiremos los atributo a la hora de crearlo.

Por ejemplo, vamos a añadir el tipo de motor a nuestros modelos:

public enum KiaModel {
    NIRO("1.6 GDi HEV 103kW"),
    XCEED("1.6 TGDi 112kW"),
    SPORTAGE("1.0 T-GDi 88kW");

    private String engine;

    private KiaModel(String engine) {
        this.engine = engine;
    }

    public String getEngine(){
        return this.engine;
    }
}

En nuestra clase Kia podemos acceder al atributo recién creado con su método correspondiente (getEngine()):

public class Kia {

    KiaModel model;

    public Kia(KiaModel model) {
        this.model = model;
    }

    public KiaModel getmodel() {
        return model;
    }

    public String toString(){
        return "Kia " + this.getmodel() + 
            " - Motor: " + this.getmodel().getEngine();
    }
}

public class App {
    
    public static void main(String[] args) {
        
        Kia niro = new Kia(KiaModel.NIRO);
        Kia sportage = new Kia(KiaModel.SPORTAGE);
        Kia xceed = new Kia(KiaModel.XCEED);

        System.out.println(niro);
        System.out.println(sportage);    
        System.out.println(xceed);
    }
}

Kia NIRO - Motor: 1.6 GDi HEV 103kW
Kia SPORTAGE - Motor: 1.0 T-GDi 88kW
Kia XCEED - Motor: 1.6 TGDi 112kW

De esta forma, podemos agregar tantos atributos como queramos a nuestros enumerados para ampliar su funcionalidad.

Ejercicios

Ejercicio 1

Modifica la clase Computer de los ejercicios del tema anterior para que el disco duro sea un enumerado con los siguientes valores:

  • HDD_NOR
  • HDD_NAND
  • SDD_25
  • SDD_M2

Ejercicio 2

Haz lo mismo con las CPUs (mediante enumerados) con los siguientes tipos:

  • PENTIUM_GOLD_G7400
  • RYZEN_3_4100
  • CORE_I5_12400F
  • RYZEN_7_5800X
  • CORE_I7_12700KF

Ejercicio 3

Añade la velocidad del procesador como una nueva propiedad del enumerado CPU:

  • PENTIUM_GOLD_G7400: 3.7 GHz
  • RYZEN_3_4100: 3.8 GHz
  • CORE_I5_12400F: 2.1 GHz
  • RYZEN_7_5800X: 3.8 GHz
  • CORE_I7_12700KF: 3.8 GHz

En el método toString() de CPU deberá mostrarse tanto el tipo de procesador como su velocidad.

Ejercicio 4

Añade también el número de hilos a las CPUs como propiedad:

  • PENTIUM_GOLD_G7400: 2/4
  • RYZEN_3_4100: 4/8
  • CORE_I5_12400F: 6/12
  • RYZEN_7_5800X: 8/16
  • CORE_I7_12700KF: 12/20
clase/daw/prog/2eval/enums.txt · Última modificación: 2022/12/27 09:21 por cesguiro