Foros del Web » Programación para mayores de 30 ;) » Java »

Tamplate <t> en java

Estas en el tema de Tamplate <t> en java en el foro de Java en Foros del Web. Buenas amigos, tengo que utilizar template en java pero la verdad no se ni para que es, ni como se utiliza, e visto muchos foros, ...
  #1 (permalink)  
Antiguo 23/07/2015, 09:38
 
Fecha de Ingreso: julio-2015
Ubicación: Guatemala
Mensajes: 11
Antigüedad: 8 años, 9 meses
Puntos: 0
Pregunta Tamplate <t> en java

Buenas amigos, tengo que utilizar template en java pero la verdad no se ni para que es, ni como se utiliza, e visto muchos foros, paginas y la verdad me confunde mas podría alguien ayudarme con esto gracias :D estoy aprendiendo java para la universidad, les agradezco desde ya su ayuda!
  #2 (permalink)  
Antiguo 24/07/2015, 05:27
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Respuesta: Tamplate <t> en java

Genericidad
__________________
El último TipdaR
  #3 (permalink)  
Antiguo 24/07/2015, 12:37
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Tamplate <t> en java

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 original
  1. public class Hamper<T> implements Iterable<T> {
  2.  
  3.     private List<T> list = new ArrayList<>();
  4.     private static final int LIMIT = 10;
  5.  
  6.     public void add(T item) {
  7.     if(list.size() < LIMIT) {
  8.         list.add(item);
  9.     } else {
  10.         throw new RuntimeException("Ya no caben más");
  11.     }
  12.     }
  13.  
  14.     public Iterator<T> iterator() {
  15.     return list.iterator();
  16.     }
  17. }

Y tenemos estos tipos de dulces:

Código Java:
Ver original
  1. public class Cookie {
  2.     ...
  3. }
  4.  
  5. public class Chocolate {
  6.     ...
  7. }
  8.  
  9. public class Candy {
  10.     ...
  11. }

Ahora, podemos hacer guardar objetos de todo tipo en nuestra canasta (Hamper):

Código Java:
Ver original
  1. Hamper<Chocolate> hamper1 = new Hamper<Chocolate>();
  2. Hamper<Cookie> hamper2 = new Hamper<Cookies>();
  3. Hamper<Candy> hamper3 = new Hamper<Cany>();
  4.  
  5. hamper1.add(new Chocolate());
  6. hamper2.add(new Cookie());
  7. 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 original
  1. public interface GenericDao<T> {
  2.     T getById(int id);
  3.     List<T> getAll(int id);
  4. }
  5.  
  6. public class GenericDaoImpl implements GenericDao {
  7.    
  8.     private Class<T> clazz;
  9.     @PersistenceContext
  10.     private EntityManager em;
  11.  
  12.     public GenericDaoImpl(Class<T> clazz) {
  13.     this.clazz = clazz;
  14.     }
  15.  
  16.     @Override
  17.     public T save(T entity) {
  18.         EntityTransaction tx = em.getTransaction();
  19.         tx.begin();
  20.         em.persist(entity);
  21.         tx.commit();
  22.     }
  23.  
  24.     @Override
  25.     public List<T> getAll() {
  26.     EntityTransaction tx = em.getTransaction();
  27.     tx.begin();
  28.         String entityName = clazz.getSimpleName();
  29.     (List<T>) return em.createQuery("SELECT t FROM " + entityName + " t";
  30.     }
  31. }

Y podemos hacer DAOs de todo tipo:

Código Java:
Ver original
  1. public class UserDao extends GenericDaoImpl<User> {
  2.  
  3.     public UserDao() {
  4.     super(User.class);
  5.     }
  6.  
  7. }
  8.  
  9. public class ReportDao extends GenericDaoImpl<Report> {
  10.  
  11.     public ReportDao() {
  12.     super(Report.class);
  13.     }
  14. }

Y podrías usarlos sin problemas:

Código Java:
Ver original
  1. List<User> allUsers = userDao.getAll();


Como ves, Generics nos ayuda mucho en hacer nuestras aplicaciones más dinámicas. Espero haya quedado más claro.

Última edición por GusGarsaky; 25/07/2015 a las 13:30

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:46.