Se llama
Generics y es una característica que apareció en Java 5. El uso de Generics nos permite poder convertir una variable temporal a un tipo de dato en tiempo de ejecución, o asegurarnos que solo se pueda manejar un tipo de dato.
1) Listas
Código Java:
Ver originalpublic class Hamper<T> implements Iterable<T> {
private List<T> list = new ArrayList<>();
private static final int LIMIT = 10;
public void add(T item) {
if(list.size() < LIMIT) {
list.add(item);
} else {
}
}
public Iterator<T> iterator() {
return list.iterator();
}
}
Y tenemos estos tipos de dulces:
Código Java:
Ver originalpublic class Cookie {
...
}
public class Chocolate {
...
}
public class Candy {
...
}
Ahora, podemos hacer guardar objetos de todo tipo en nuestra canasta (Hamper):
Código Java:
Ver originalHamper<Chocolate> hamper1 = new Hamper<Chocolate>();
Hamper<Cookie> hamper2 = new Hamper<Cookies>();
Hamper<Candy> hamper3 = new Hamper<Cany>();
hamper1.add(new Chocolate());
hamper2.add(new Cookie());
hamper3.add(new Candy());
Como ves no necesito crear 3 clases para cada canasta, con Generics solo hago una genérica para los 3 dulces.
2) Un DAO genérico
Código Java:
Ver originalpublic interface GenericDao<T> {
T getById(int id);
List<T> getAll(int id);
}
public class GenericDaoImpl implements GenericDao {
private Class<T> clazz;
@PersistenceContext
private EntityManager em;
public GenericDaoImpl(Class<T> clazz) {
this.clazz = clazz;
}
@Override
public T save(T entity) {
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(entity);
tx.commit();
}
@Override
public List<T> getAll() {
EntityTransaction tx = em.getTransaction();
tx.begin();
String entityName
= clazz.
getSimpleName(); (List<T>) return em.createQuery("SELECT t FROM " + entityName + " t";
}
}
Y podemos hacer DAOs de todo tipo:
Código Java:
Ver originalpublic class UserDao extends GenericDaoImpl<User> {
public UserDao() {
super(User.class);
}
}
public class ReportDao extends GenericDaoImpl<Report> {
public ReportDao() {
super(Report.class);
}
}
Y podrías usarlos sin problemas:
Código Java:
Ver originalList<User> allUsers = userDao.getAll();
Como ves, Generics nos ayuda mucho en hacer nuestras aplicaciones más dinámicas. Espero haya quedado más claro.