some image

Codes and Tags

Utilizando comodines para colecciones y tipos genéricos en Java

Etiquetas: , Blog, Programación No comments

Bien, esta vez mi cápitulo de estudio habla sobre el manejo de los comodines  utilizando los tipos genéricos.

Primero que todo, partiré de la teória que un tipo genérico nos permite disponer de colecciones capaces de almacenar cualquier tipo de de objeto. La famosa <E> (Por ejemplo a veces cuando estamos definiendo un ArrayList y el IDE nos muestra la sugerencia de ArrayList<E>).

Sucede que en el caso de que queramos implementar un método al que no le importe el tipo de dato que queremos mostrar, tendremos un problema, debido a que en el caso de las colecciones ellos por obligación utilizan la definición de un tipo de dato. Ejemplo :

ArrayList<String>()
ArrayList<Integer>()
ArrayList<Double>()
...
HashTable <String>><String>()
HashTable <Integer><String>()

y bueno, ¿Que pasaría si en mi ejemplo quisiera un método que listara los elementos de esas colecciones?... En el caso de que yo defina el tipo de dato que maneja la colección mi método se verá limitado solo a ese tipo de Objetos…

Pero bueno, el punto aquí es el siguiente : Existen 2 formas de hacer que los comodines puedan acceder a cualquier tipo de Objeto, teniendo en cuenta que todas las clases heredan de Object.

1) Se puede utilizar el comodin <?> para los genéricos,  donde en vez de indicar explicitamente el tipo de objeto  a manejar, dejamos que sea Java quien se encarga de hacer el propio casting para convertirlo en un Object.

2) No indicar el genérico. Aunque para aumentar la mantenibilidad y claridad de código siempre es recomendable hacer alusión al tipo de objeto en las colecciones que estemos manejando.

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;

/**
 * Ejemplo de Herencia con tipos Genericos y algunas colecciones Aqui se muestra
 * la magia de los comodines para el recorrido de colecciones
 *
 * @author CodesandTags
 */
public class HerenciaGenericos {

	public static void main(String[] args) {
		// Aqui esta la prueba
		// Lista de nombres
		ArrayList nombres = new ArrayList();
		nombres.add("Clerigo");
		nombres.add("Phicar");
		nombres.add("Dmk");
		nombres.add("TalCosa");
		nombres.add("Urban");
		nombres.add("Radical");

		// Imprimiento
		System.out.println(" [ Nombres ] ");
		imprime(nombres);

		// Lista de numeros
		ArrayList numeros = new ArrayList();
		numeros.add(12);
		numeros.add(6);
		numeros.add(66);
		numeros.add(888);
		numeros.add(777);

		// Imprimiendo
		System.out.println("\n [ Numeros ] ");
		imprime(numeros);

		// Ahora los HashTables
		Hashtable empleados = new Hashtable();
		empleados.put("1111", "Programador");
		empleados.put("9999", "Tester");
		empleados.put("3333", "Director Proyecto");
		empleados.put("5555", "Gerente Tecnologia");
		empleados.put("6666", "Analista Requerimientos");

		System.out.println("\n [ Empleados ] ");
		imprime(empleados);
	}

	/**
	 * Metodo que se encarga de imprimir una lista de objetos sin importar el
	 * tipo de datos almacenados
	 *
	 * @param objetos
	 */
	public static void imprime(ArrayList objetos) {
		for (Object o : objetos) {
			System.out.println("=> " + o);
		}
	}

	/**
	 * Metodo sobrecargado de imprimir pero utilizando un HashTable
	 *
	 * @param objetos
	 */
	public static void imprime(Hashtable objetos) {
		Enumeration keys = objetos.keys();
		while (keys.hasMoreElements()) {
			System.out.println("=> " + objetos.get(keys.nextElement()));
		}
	}

}

Ejemplo de Salida

 

 [ Nombres ] 
=> Clerigo
=> Phicar
=> Dmk
=> TalCosa
=> Urban
=> Radical

 [ Numeros ] 
=> 12
=> 6
=> 66
=> 888
=> 777

 [ Empleados ] 
=> Gerente Tecnologia
=> Director Proyecto
=> Programador
=> Analista Requerimientos
=> Tester

About Edwin Torres

Related Posts

  • Logo Java
  • Logo Java
  • Logo Java
  • Logo Java

Add your comment