Merci beaucoup pour ta réponse.
Je dois avouer que je suis un peu déçu, je m'imaginais que comme T représentait une classe, on pouvait y faire référence plus simplement. En effet, par la suite, en déclarant
public class UserDAOImpl extends BaseDAOImpl<User>
je défini déjà que le type de ma classe est User. Ca aurait été plus élégant si je ne devais re-définir son type à nouveau dans le constructeur.
En fait pour la petite histoire, j'ai construit une interface qui définit les méthodes CRUD pour ma DAO, et je voulais leur donner une implémentation générique. Ensuite, je pouvais étendre ces DAOs avec des méthodes spécifiques en fonction de mes entités.
En gros, ça donnait ceci :
1) L'interface générique
1 2 3 4 5 6 7 8 9 10 11 12
| /**
* @param <T>
*/
public interface BaseDAO<T> {
public void create(T entity);
public T retrieve(Serializable id);
public List<T> retrieveAll();
public void update(T entity);
public void delete(T entity);
} |
2) L'implémentation générique
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| /**
* @param <T>
*/
public class BaseDAOImpl<T> extends HibernateDaoSupport implements BaseDAO<T>{
public void create(T entity) {
getHibernateTemplate().save(entity);
}
public void delete(T entity) {
getHibernateTemplate().delete(entity);
}
public T retrieve(Serializable id) {
if (id==null) return null;
return (T) getHibernateTemplate().load(T.class,id);
}
@SuppressWarnings("unchecked")
public List<T> retrieveAll() {
return getHibernateTemplate().loadAll(T.class);
}
public void update(T entity) {
getHibernateTemplate().merge(entity);
}
} |
3) Mon DAO spécialisé
1 2 3 4 5
| public class UserDAOImpl extends BaseDAOImpl<User> implements UserDAO{
//code personnalisé
} |
Voilà voilà, bin en tout cas encore merci pour ta solution et la rapidité de ta réponse!
Partager