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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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.