Tipos enumerados en Java

Hola a todos, hoy os explicare como podemos crear tipos enumerados en Java.

Los tipos enumerados es como una clase donde definimos una serie de constantes de cualquier tipo de dato, normalmente suelen tener algo en común entre entre ellos.

Por ejemplo, ¿Que tienen en común Java, PHP, C++, etc? Estos son lenguajes de programación. Vamos a usar esto de ejemplo.

Para crear un tipo enumerado en Eclipse, pincharemos en New-> Enum, escribimos el nombre del tipo de la enumeración.

Después, escribimos los valores separados por comas, estos estarán en mayúsculas como si fueran constante. Veamos el tipo enumerado de Lenguajes:

public enum Lenguajes{
	JAVA,
	PHP,
	C,
	PERL,
	RUBY,
	PYTHON
}

Este tipo enumerado lo podemos usar en las clases de nuestro proyecto. Veamos un ejemplo de una clase, usando este tipo enumerado, crearemos una clase programador en el que uno de sus atributos es un tipo enumerado:

–Programador

/**
 * Clase Programador
 * @author Fernando
 * @version 1.0
 *
 * Contiene informacion sobre un programador
 *
 */
public class Programador {

	/**
	 * Nombre del programador
	 */
	private String nombre;

	/**
	 * Edad del programador
	 */
	private int edad;

	/**
	 * Indica en que lenguaje es experto
	 */
	private Lenguajes expertoEn;

	/**
	 * Devuelve el nombre del programador
	 * @return nombre del programador
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * Devuelve la edad del programador
	 * @return edad del programador
	 */
	public int getEdad() {
		return edad;
	}

	/**
	 * Devuelve en que lenguaje es experto el programador
	 * @return especialidad del programador
	 */
	public Lenguajes getExpertoEn() {
		return expertoEn;
	}

	/**
	 * Constructor con 3 parametros
	 * @param nombre
	 * @param edad
	 * @param expertoEn
	 */
	public Programador(String nombre, int edad, Lenguajes expertoEn){
		this.nombre=nombre;
		this.edad=edad;
		this.expertoEn=expertoEn;
	}

}

–Clase Ejecutable

public class ProgramadorApp {

	public static void main(String[] args) {

		Programador programador1=new Programador("Fernando", 23, Lenguajes.JAVA);
		Programador programador2=new Programador("Alberto", 27, Lenguajes.PHP);
		Programador programador3=new Programador("Sergio", 30, Lenguajes.PYTHON);

		System.out.println("La informacion sobre el programador 1 es la siguiente: \n" +
				"Nombre: "+programador1.getNombre()+"\n" +
				"Edad: "+programador1.getEdad()+"\n" +
				"Es experto en: "+programador1.getExpertoEn()+"\n");

		System.out.println("La informacion sobre el programador 2 es la siguiente: \n" +
				"Nombre: "+programador2.getNombre()+"\n" +
				"Edad: "+programador2.getEdad()+"\n" +
				"Es experto en: "+programador2.getExpertoEn()+"\n");

		System.out.println("La informacion sobre el programador 3 es la siguiente: \n" +
				"Nombre: "+programador3.getNombre()+"\n" +
				"Edad: "+programador3.getEdad()+"\n" +
				"Es experto en: "+programador3.getExpertoEn()+"\n");
	}

}

Como vemos, para asignar la especialidad usamos el tipo enumerado, igual que si fuera una constante.

También podemos hacer operaciones con los tipos tipos enumerados, por ejemplo contar cuantos experto en Java hay.

public class ProgramadorApp {

	public static void main(String[] args) {

		//Array de Programadores
		Programador programadores[]=new Programador[3];
		programadores[0]=new Programador("Fernando", 23, Lenguajes.JAVA);
		programadores[1]=new Programador("Alberto", 27, Lenguajes.PHP);
		programadores[2]=new Programador("Sergio", 30, Lenguajes.PYTHON);

		//Contador Java
		int contador=0;

		for(int i=0;i<3;i++){
			if (programadores[i].getExpertoEn()==Lenguajes.JAVA){
				contador++;
			}
		}

		System.out.println("Hay "+contador+" experto/s en Java");
	}

}

En los tipos enumerados, también podemos asignar valores a las constantes, para ello debemos agregar un constructor y si queremos un método get para que nos lo devuelva el valor. Veamos un ejemplo:

–Tipo enumerado

public enum Lenguajes{
	//Valores
	JAVA(4),
	PHP(2),
	C(5),
	PERL(6),
	RUBY(3),
	PYTHON(4);

	//Atributo
	int aniosAprendizaje ;

	//Constructor
	Lenguajes(int aniosAprendizaje){
		this.aniosAprendizaje=aniosAprendizaje;
	}

	//Metodo
	public int getAniosAprendizaje(){
		return aniosAprendizaje;
	}

}

–Programador

Igual que en el anterior caso.

–Clase ejecutable

public class ProgramadorApp {

	public static void main(String[] args) {

		//Array de Programadores
		Programador programadores[]=new Programador[3];
		programadores[0]=new Programador("Fernando", 23, Lenguajes.JAVA);
		programadores[1]=new Programador("Alberto", 27, Lenguajes.PHP);
		programadores[2]=new Programador("Sergio", 30, Lenguajes.PYTHON);

		int cuentaAniosAprendizaje=0;

		for(int i=0;i<programadores.length;i++){
			//Invoco el lenguaje de programacion y a partir de este el numero de años de aprendizaje
			cuentaAniosAprendizaje+=programadores[i].getExpertoEn().getAniosAprendizaje();
		}

		System.out.println("La suma de los años de aprendizaje de los programadores es de "+cuentaAniosAprendizaje);
	}

}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

5 comentarios

  1. José Luis

    Hola Fernando,

    Gracias por el ejemplo… pero tengo una duda…
    ¿Cómo podría asignar varios lenguajes a cada programador??, de la manera que está planteado sólo puedo asignar un lenguaje a cada programador.

    Muchas gracias y saludos cordiales.

  2. Disco Duro de Roer Post author

    Ahora mismo solo podria uno, pero podrias meterle un array de enumerados

  3. Benjamín L

    Porqué en el ejemplo que diste al comienzo en el segundo código, está «private»? para qué sirve?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *