factoriser une methode - Java - Programmation
Marsh Posté le 16-03-2012 à 12:47:53
Le code que tu donnes n'est pas conventionnel avec des classes dont le nom est entièrement en majuscules
et un nom name() peu courant ( getName() respectera plus les conventions),
mais je pense avoir compris et il faut mettre en oeuvre des méthodes polymorphes.
Même nom de méthode, mais nombre de paramètre et type des paramètres différent.
Dans ton cas si atransformer.State est une interface
Code :
|
implémenté par exemple par OK
Code :
|
ou ERROR
Code :
|
Tu auras des méthodes convertState
Code :
|
Pour tester :
Code :
|
Cela multiplie le nombre de méthodes mais diminue les possibilités d'erreurs.
Et par ailleurs, le code ne compilera pas si tu introduits un nouveau state sans prévoir la méthode convertState à associer.
Marsh Posté le 20-02-2012 à 14:11:20
Comment je peux factoriser les méthodes en une seule, le type en paramètre est différent mais le type de retour est le même?
static public package.machin.State convertState(package.atransformer.State state){
package.machin stateVision = null;
if (state.name().equals(package.machin.CLEAR.name())) {
stateVision = package.machin.CLEAR;
}
else if (state.name().equals(package.machin.CRITICAL.name())) {
stateVision = package.machin.CRITICAL;
}
else if (state.name().equals(package.machin.ERROR.name())) {
stateVision = package.machin.ERROR;
}
else if (state.name().equals(package.machin.EXPIRED.name())) {
stateVision = package.machin.EXPIRED;
}
else if (state.name().equals(package.machin.OK.name())) {
stateVision = package.machin.OK;
}
else if (state.name().equals(package.machin.WARNING.name())) {
stateVision = package.machin.WARNING;
}
return stateVision;
}
static public package.machin convertState(package.atransformer.bis.State state){
package.machin stateVision = null;
if (state.name().equals(package.machin.CLEAR.name())) {
stateVision = package.machin.CLEAR;
}
else if (state.name().equals(package.machin.CRITICAL.name())) {
stateVision = package.machin.CRITICAL;
}
else if (state.name().equals(package.machin.ERROR.name())) {
stateVision = package.machin.ERROR;
}
else if (state.name().equals(package.machin.EXPIRED.name())) {
stateVision = package.machin.EXPIRED;
}
else if (state.name().equals(package.machin.OK.name())) {
stateVision = package.machin.OK;
}
else if (state.name().equals(package.machin.WARNING.name())) {
stateVision = package.machin.WARNING;
}
return stateVision;
}