Salut,
T représente un type (une classe) quelconque dans ton cas, et Class<T> représente une instance de Class d'un object de type T.
Quand tu écris :
1 2 3 4 5 6 7 8 9 10 11
| 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;
}
... |
tu crées une classe, appelée GenericDAOImpl, qui est paramétrée par 2 types, T et Pk. T est de type quelconque, et Pk est un type qui implémente Serializable.
Le constructeur de cette classe a un paramètre, dont le type est la classe T. Si tu crées une instance de cette classe, tu devras indiquer pour quel type, et tu devras passer la classe correspondante en argument du constructeur.
Par exemple :
new GenericDAOImpl<Integer, String>(Integer.class);
Ou
new GenericDAOImpl<ArrayList, Integer>(ArrayList.class);
Il ne faut pas passer null en paramètre, si tu te sers de la variable type de GenericDAO, pour éviter une NullPointerException. Si tu ne t'en sers pas, autant la supprimer (ce qui n'est pas le cas apparemment).
En tout cas, tu ne peux pas écrire :
1 2 3 4 5 6 7 8 9 10 11 12
| 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;
} |
Si type est du type Class<T>, tu ne pourras pas le caster en T. Je n'y connais rien en hibernate mais, à mon avis, le code devrait être :
1 2 3 4 5 6 7 8 9 10 11 12 13
| public T read(Pk id) {
T value = null;
try {
this.session = HibernateUtil.getSession();
this.session.beginTransaction();
value = this.session.get(this.type, id);
} catch (HibernateException e) {
System.out.print(e.getMessage());
}
return value;
} |
La méthode T get(Class<T>, Pk) de session doit permettre de lire un bean de classe T, et pour pouvoir instancier ce bean, on lui fournit un object, qui est un objet de classe Class<T>, et qui représente la classe de ce bean.
Partager