Enumerados como clases Enum en Java. Constructores. Método values. Ejercicio ejemplo resuelto. (CU00682B)

Resumen: Entrega nº82 del curso "Aprender programación Java desde cero". 
Codificación aprenderaprogramar.com: CU00682B 

 

 

ENUMERADOS CLASES CON CAMPOS Y CONSTRUCTORES. MÉTODOS VALUES.

Un tipo enumerado en Java es un tipo “especial” que en cierta medida puede usarse como una clase y admite ciertas posibilidades especiales. En BlueJ, cuando pulsamos sobre New Class… una opción es Enum. Si elegimos esta opción (o si el código que escribimos se corresponde con una clase Enum), la clase se verá en el diagrama de clases con la palabra <<Enum>> en su icono.

 

enum, java tipos enumerados

 

 

De esta manera podemos decir que ya conocemos tres tipos de clases: clases que definen tipos (clases “normales”), clases que incorporan un método main (clases tipo “ejecutable”) y por último las clases “enum” que incorporan enumerados y que tienen ciertas peculiaridades. Entre las cosas especiales que se pueden hacer con una clase de tipo Enum tenemos:

a) Se dispone automáticamente de métodos especiales como el método values(), que devuelve un array con todos los valores del enum (esto realmente es intrínseco al enumerado, no hace falta que el enumerado vaya en una clase independiente para disponer de esta posibilidad).

b) Un tipo enumerado puede añadir campos constantes al objeto enumerado y recuperar esos campos. Para ello se usa un constructor especial para enumerados.

 

En relación al método values(), se trata de un método especial que el compilador agrega automáticamente cuando se crea un enum. Este método devuelve un array conteniendo todos los valores del enumerado en el orden en que son declarados y se usa comúnmente en combinación con el ciclo for-each para iterar sobre los valores de un tipo enum. Ejemplo de código. Compílalo y comprueba el resultado de ejecución (hay que definir el tipo enumerado en una clase independiente previamente):

//Ejemplo aprenderaprogramar.com

public class TestEnum2 {

    public static void main (String[ ] Args) {

        TipoDeMadera miTipoDeMadera = TipoDeMadera.CAOBA;    //El tipo lo definimos en otra clase como public enum

        System.out.println ("Los posibles tipos de madera son: ");

        for (TipoDeMadera tmp: miTipoDeMadera.values() ) {

            System.out.print(tmp.toString()+"\t");   }  //Ejemplo de uso de print con tabulador \t

    } //Cierre del main

} //Cierre de la clase

 

 

El resultado de la ejecución será similar a este:

Los posibles tipos de madera son:

ROBLE     CAOBA     NOGAL     CEREZO     BOJ

 

 

Pasemos a otra cuestión. Al declarar el tipo podemos asociarle campos directamente escribiéndolos entre paréntesis después del nombre del enumerado. Luego declararemos un constructor (sin la palabra clave public, ya que el constructor no puede ser público porque no podemos crear objetos del tipo enumerado con la sentencia new, pero sí podemos hacer que un objeto lleve asociados determinados parámetros constantes). Veamos un ejemplo que consta de dos clases:

a) Clase de tipo Enum: contiene la definición de los enumerados, de los campos asociados a cada enumerado y los tipos y valores de estos campos, constructor intrínseco y métodos para acceder a los campos.

b)    Clase que contiene un método main que usa la clase de tipo Enum y sus métodos.

 

// Ejemplo aprenderaprogramar.com

// Clase que contiene los tipos de madera que usa la empresa, su color y su peso específico en kg/m3

public enum TipoDeMadera {

    ROBLE ("Castaño verdoso", 800), //Separamos con comas

    CAOBA ("Marrón oscuro", 770),

    NOGAL("Marrón rojizo", 820),

    CEREZO ("Marrón cereza", 790),

    BOJ ("Marrón negruzco", 675);  //Cuando terminamos cerramos con ;

 

    //Campos tipo constante   

    private final String color; //Color de la madera

    private final int pesoEspecifico; //Peso específico de la madera

 

    /**

     * Constructor. Al asignarle uno de los valores posibles a una variable del tipo enumerado el constructor asigna 

        automáticamente valores de los campos

     */ 

    TipoDeMadera (String color, int pesoEspecifico) { 

        this.color = color;

        this.pesoEspecifico = pesoEspecifico;

    } //Cierre del constructor

 

    //Métodos de la clase tipo Enum

    public String getColor() { return color; }

    public int getPesoEspecifico() { return pesoEspecifico; }

} //Cierre del enum

 

/**

 * Esta clase prueba una clase de tipo Enum realizando distintas operaciones con ella test aprenderaprogramar.com

 * @author Alex Rodríguez

 * @version 13.04.19

 */

public class TestClaseEnum {

    public static void main (String[ ] Args) {

 

       TipoDeMadera maderaUsuario1 = TipoDeMadera.ROBLE;

       System.out.println ("La madera elegida por el usuario es " + maderaUsuario1.toString() + "\ncon un color " +

       maderaUsuario1.getColor() + " y con un peso específico de " + maderaUsuario1.getPesoEspecifico() + " kg/m3");

 

       System.out.println ("Un palet admite 2.27 m3 de volumen. A continuación el peso de los palets de las distintas maderas:");

 

        for (TipoDeMadera tmp: TipoDeMadera.values() ) {

            System.out.println (tmp.toString() + " el palet pesa " + (2.27f*(float)tmp.getPesoEspecifico() ) + " kg");

        }

} //Cierre del main

} //Cierre de la clase

 

 

Escribe el código y ejecuta el método main. Obtenemos un resultado similar a este:

La madera elegida por el usuario es ROBLE

con un color Castaño verdoso y con un peso específico de 800 kg/m3

 

Un palet admite 2.27 m3 de volumen. A continuación el peso de los palets de las distintas maderas:

 

ROBLE el palet pesa 1816.0 kg                 CAOBA el palet pesa 1747.9 kg

NOGAL el palet pesa 1861.4 kg               CEREZO el palet pesa 1793.2999 kg

BOJ el palet pesa 1532.25 kg

 

 

La posibilidad de disponer un constructor y métodos supone interesantes posibilidades para el trabajo con enumerados en Java.

 

 

EJERCICIO

Declara una clase que represente el tipo enumerado que define tipos de piedra con los valores CALIZA, MARMOL, PIZARRA, CUARZITA. Si sus pesos específicos son de 1200, 1423.55, 1325 y 1466.22, crea un programa que muestre el peso de los palets de cada uno de los tipos de piedra. Puedes comprobar si tu código es correcto consultando en los foros aprenderaprogramar.com.

 

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.

Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

MARZO - ABRIL 2017

1. Java / J2EE
2. Entornos Oracle
3. JavaScript, jQuery
4. .NET, C#
5. Entornos SQL Server
6. HTML, CSS
7. Php, MySql
8. Android, iOS


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación