Capacitación de Java

Sintaxis del lenguaje Java

Genéricos (Generics)

Clase Simple Caja y Casting

public class Caja {
	private Object object;
	
	public void poner(Object object){
		this.object=object;
	}
	
	public Object obtener(){
		return object;
	}
}
	

Se pone un objeto Integer en la caja:

			Caja cajaDeEnteros= new Caja();
			cajaDeEnteros.poner(new Integer(8));
			Integer entero =  (Integer) cajaDeEnteros.obtener();
			System.out.println(entero);
	

Ahora si se pone un String no detecta el error en tiempo de compilación:

			cajaDeEnteros.poner("Hola");
			Integer entero =  (Integer) cajaDeEnteros.obtener();
			System.out.println(entero);
	

y en tiempo de ejecución se muestra un ClassCastException.

Alternativa con Genéricos

public class Caja<T> {

	private T t; // T se entiende como el tipo.

	public void poner(T t) {
		this.t = t;
	}

	public T obtener() {
		return t;
	}
}

Y se lo usaría de la siguiente forma:

Caja < Integer >  cajaDeEnteros = new Caja < Integer >();

Ahora para obtener el objeto no se necesita hacer casting y ahora se detecta el error en tiempo de ejecución.

			cajaDeEnteros.poner(new Integer(5));
			Integer entero =  cajaDeEnteros.obtener(); //no se hace casting
			System.out.println(entero);

Convención para nombrar a los genéricos

Ejemplo:

public < U >  void probarOtro(U u){
        System.out.println("T: " + t.getClass().getName());
        System.out.println("U: " + u.getClass().getName());
}
		
Anterior Índice