L'utilité de la généricité de Java
Bonjour,
j'utilise le pattern Dao, pour implémenter la couche d'accès aux données, j'ai donc créé une interface générique comme ceci:
Code:
1 2 3 4 5 6 7 8
|
public interface GenericDAO<T, PK extends Serializable> {
/** Persist the newInstance object into database */
void create(T newInstance);
...
} |
une implémentation de cette interface en utilisant le framework Hibernate:
Code:
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
|
public class GenericDAOImpl<T, Pk extends Serializable> implements GenericDAO<T, Pk >{
private Class<T> type;
private Session session;
public GenericDAOImpl(Class<T> classe) {
this.type = classe;
}
@Override
public void create(T newInstance) {
try{
this.session = HibernateUtil.getSession();
this.session.beginTransaction();
this.session.save(newInstance);
this.session.getTransaction().commit();
System.out.print("oui");
}
catch (HibernateException e){
System.out.print(e.getMessage());
}
}
...} |
mais je ne comprends pas la différence entre Class<T> et T ? parce que j'ai fait ceci,
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public T read(Pk id) {
try {
this.session = HibernateUtil.getSession();
this.session.beginTransaction();
this.type = (Class<T>)this.session.get(this.type, id);
} catch (HibernateException e) {
System.out.print(e.getMessage());
}
return (T) this.type;
} |
mais malheureusement, le read ne marche pas:
Code:
1 2 3 4 5
|
GenericDAO<Projet,Integer> genericDAO = new GenericDAOImpl<Projet, Integer>(null);
Projet projet2 = new Projet();
projet2 = genericDAO.read(2);
System.out.print(projet2.getNom()); |
je ne comprends ce 'null'.
pourquoi c'est permis de faire:
Code:
1 2 3 4 5 6
|
private Class<Projet> projet;
private ProjetDAO projetDAO = new ProjetDAOImp(projet );
Projet p = new Projet();
p.setNom("projet1");
projetDAO.create(p); |
et merci d'avance.