Contenido de certificación
Buscar
Social
Ofertas laborales ES
« Bucle infinito en WeakHashMap no sincronizado | Main | Crear un Singleton »
martes
oct232012

Clases y tipos genéricos

Mejor con un ejemplo:

class ClaseGenerica<T> {
T obj;

public ClaseGenerica(T o) {
obj = o;
}

public void classType() {
System.out.println("El tipo de T es " + obj.getClass().getName());
}
}

public class MainClass {
public static void main(String args[]) {
// Creamos una instancia de ClaseGenerica para Integer.
ClaseGenerica<Integer> intObj = new ClaseGenerica<Integer>(88);
intObj.classType();

// Creamos una instancia de ClaseGenerica para String.
ClaseGenerica<String> strObj = new ClaseGenerica<String>("Test");
strObj.classType();

}
}

Unos apuntes:

- T es el tipo genérico que será reemplazado por un tipo real.
- T es el nombre que damos al parámetro genérico.
- Este nombre se sustituirá por el tipo real que se le pasará a la clase.

El resultado será el siguiente:

El tipo de T es java.lang.Integer
El tipo de T es java.lang.String

Hay que tener en cuenta que los generics de java solo funcionan con objetos. El código siguiente nos mostrará un error:

ClaseGenerica<int> myOb = new ClaseGenerica<int>(53); // Error, can't use primitive type

Existen una serie de convenciones para nombrar a los genéricos:

E – Element (usado bastante por Java Collections Framework)
K – Key (Llave, usado en mapas)
N – Number (para números)
T – Type (Representa un tipo, es decir, una clase)
V – Value (representa el valor, también se usa en mapas)
S,U,V etc. – usado para representar otros tipos.

El artículo original se puede encontrar en este post: http://jonsegador.com/2012/10/clases-y-tipos-genericos-en-java

NOTA: artículo publicado por jonseg

Reader Comments (2)

A propósito de genéricos, hay dos enlaces que me parecen de lo más interesantes:

1.- Cuestiones sobre genéricos.
http://thoughtflow.ca/en/are-you-a-generics-rock-star-or-just-generic-test/

2.- La "biblia" de los genéricos.
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#Topic9

Este último es realmente denso, pero creo que hay pocos artículos más completos.

octubre 23, 2012 | Registered Commenterchoces

Desde mi punto de vista, el conocer genéricos facilita mucho la reducción de clases. Por ejemplo, es habitual ver como con Spring e Hibernate se implementa una clase DAO genérica, que acepta la clave primaria y la clase, y con esta clase, y sin más clases, ya tenemos TODO el modelo de una aplicación (ya sean 10 o 100 clases).

Super cómodo y super mantenible, en mi opinión.

octubre 25, 2012 | Registered Commenterjcarmonaloeches

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>