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 :
- public interface State {
- public static String OK = "OK";
- public static String ERROR = "ERROR";
- public static String EXPIRED = "EXPIRED";
- // ...
- public String name();
- }
|
implémenté par exemple par OK
Code :
- public class OK implements atransformer.State {
- public String name(){
- return State.OK;
- }
- }
|
ou ERROR
Code :
- public class EXPIRED implements atransformer.State {
- public String name(){
- return State.EXPIRED;
- }
- }
|
Tu auras des méthodes convertState
Code :
- static public machin.State convertState(OK ok){
- return new StateVision("OK" );
- }
- static public machin.State convertState(EXPIRED expired){
- return new StateVision("EXPIRED" );
- }
|
Pour tester :
Code :
- OK ok = new OK();
- StateVision visionOk = convertState(ok);
- System.out.println(visionOk.vision); // affiche OK
- ERROR er = new ERROR();
- StateVision visionEr = convertState(er);
- System.out.println(visionEr.vision); //affiche ERROR
|
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.
Message édité par willy le kid le 16-03-2012 à 12:55:55