jeudi 20 janvier 2011

java : faire une méthode générique

Voici un petit exemple de méthode générique :

Voici une première méthode simple qui prend un type paramétrable :




Une plus complexe, qui déclare un type TDAO qui doit obligatoirement étendre l'inteface GenericDAO, qui elle même, prend 2 types génériques, un TBEAN et un type ? qui implemente Serialisable)


private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(

final TDAO dao, final Collection<TBEAN> beans)


Attention, les types sont réutilisés pour les paramètres de la méthode :

final
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(final TDAO dao, final Collection<TBEAN> beans )



Voici le code complet :


/**
* initialise puis supprime la collection de bean passés en paramètre
* Attention, les types DAO et beans doivent correspondrent
* @param <TDAO> est le type de DAO
* @param <TBEAN> est le type de bean
* @param dao est le DAO
* @param beans est une Collecion de beans
*/
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(
final TDAO dao, final Collection<TBEAN> beans) {
if (beans != null && dao != null) {
isInitialized(beans);
for (TBEAN bean : beans) {
supprimerRelation(dao,bean);
}
}
else if(beans == null)
{
logger.debug("La collection passée en paramètre ne doit pas être null");
}
else{
logger.debug("Le DAO passée en paramètre ne doit pas être null");
}
}

/**
* initialise puis supprime le bean passé en paramètre
* Attention, les types DAO et bean doivent correspondrent
* @param <TDAO> est le type de DAO
* @param <TBEAN> est le type de bean
* @param dao est un DAO
* @param bean est le bean
*/
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(
final TDAO dao, final TBEAN bean) {
if (bean != null && dao != null) {
isInitialized(bean);
dao.delete(bean);
} else if (bean == null) {
logger.debug("Le bean passé en paramètre ne doit pas être null");
} else {
logger.debug("Le DAO passé en paramètre ne doit pas être null");
}
}

/**
* initialise et retourne au sens hibernate un bean
* @param <T> le type du bean
* @param bean le bean a initialiser
* @return le bean passé en paramètre (ne sert que pour pouvoir faire une affectation )
*/
private <T> T isInitialized(T bean) {
if (bean != null && !Hibernate.isInitialized(bean)) {
Hibernate.initialize(bean);
}
return bean;
}

Aucun commentaire:

Enregistrer un commentaire