Usar Genéricos en Java

Curso de Java

11.  
22.  

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Genéricos en clases

public class Generics1 {
	public static void main(String[] args) {
	Calculadora calculadora = new Calculadora();
		calculadora.sumar(4, 5);
	}
}

// El tipo de dato generico E (valdria cualquier nombre de clase inexistente)
// podra ser sustituido dentro de la clase por una clase de
// cualquier tipo, que sera definido al declarar e instanciar la clase
class Calculadora {
	public double sumar(T n1, T n2) {
		if (n1 instanceof Number && n2 instanceof Number) {
			return (Double.parseDouble(n1.toString()) +  Double.parseDouble(n2.toString()));
		}	 
		return 0;
	}

	// Un metodo estatico no puede acceder a un tipo de dato generico
	// Cuando declaro un objeto de la clase calculadora defino el tipo de dato
	// que va a sustituir al generico. Sin embargo un
	// metodo estatico es cargado en memoria antes de declarar la clase que lo
	// contiene y por tanto no sabemos que tipo de dato va a
	// sustituir al generico, ya que este tipo de dato es definido al hacer la
	// declaracion
	//public static void sumar2(E e, E e2) {}
}

Un método estático no puede acceder a un tipo de dato genérico. Cuando declaro un objeto de la clase calculadora defino el tipo de dato que va a sustituir al genérico. Sin embargo un método estático es cargado en memoria antes de declarar la clase que lo contiene y por tanto no sabemos que tipo de dato va a sustituir al genérico, ya que este tipo de dato es definido al hacer la declaración

El tipo de dato genérico E (valdría cualquier nombre de clase inexistente) podrá ser sustituido dentro de la clase por una clase de cualquier tipo, que será definido al declarar e instanciar la clase

Caso concreto

Si para usar genéricos en una clase usamos una palabra reservada, los objetos declarados con esa palabra reservada no serán lo que corresponda, sino que serán de tipo Object

class Generics<String> {
	String valor=(String) "elefante";
}

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.