Généralisation de méthode <T>
Bonjour,
J'ai une méthode qui est reprise dans plusieurs classes, la seule chose qui change c'est le type des paramètre. Je voudrait la généraliser mais je me heurte à quelques difficultés. Je ne sais pas si je m'y prends bien.
Contenu de la méthode non généralisé :
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 28 29 30
|
public void synchronizeAffectation(Affectation iAffectation, Affectation rAffectation, List<Mouvement> mouvements, boolean simuler) {
if( _log.isDebugEnabled() )
_log.debug("synchronizeAffectation(affectation=" + iAffectation + ")");
HiDatabase db = HiReferentiel.get();
long cc = db.transactionRequired();
try {
/* Si affectation dans le référentiel non existant : insertion. */
if( rAffectation == null ) {
if( _log.isInfoEnabled())
_log.info("INSERT " + iAffectation);
// Inserer le nouvel object
if( ! simuler )
db.getSession().persist(iAffectation);
else
// FIXME Impossible puisque rAffectation est null
//iAffectation.setTechid( rAffectation.getTechid() );
mouvements.add(new MouvementInsert(iAffectation));
} catch (RuntimeException e) {
db.setRollbackOnly();
throw e;
} finally {
db.transactionEnd(cc);
}
} |
Voila la généralisation que j'ai essayé de faire :
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 28 29 30 31 32 33
|
public abstract class Service<T extends TechIdentifiable> {
private static final Logger _log = Logger.getLogger(Service.class);
public void synchronize (Class <T> iObject,Class <T> rObject, List<Mouvement> mouvements, boolean simuler ) {
if( _log.isDebugEnabled() )
_log.debug("synchronizeAffectationHisto(affectationHisto=" + iObject + ")");
HiDatabase db = HiReferentiel.get();
long cc = db.transactionRequired();
try {
/* Si affectation dans le référentiel non existant : insertion. */
if( rObject == null ) {
if( _log.isInfoEnabled())
_log.info("INSERT " + iObject);
// Inserer le nouvel object
if( ! simuler )
db.getSession().persist(iObject);
else
// FIXME Peut pas marcher : rAffectationHisto est null
//iAffectationHisto.setTechid( rAffectationHisto.getTechid());
mouvements.add(new MouvementInsert(iObject));
} catch (RuntimeException e) {
db.setRollbackOnly();
throw e;
} finally {
db.transactionEnd(cc);
}
} |
Le problème est que ma méthode MouvementInsert me présente l'erreur suivante :
Citation:
The constructor MouvementInsert(Class<T>) is undefined
.
Et il m'est également impossible d'accéder aux méthodes de ma classe <T> (ce qui me parait normal) mais plutot génant dans mon codage....
Pouvez-vous m'éclairer sur la marche à suivre, une solution autre est-elle préférable ? Merci.