factoriser une methode

factoriser une methode - Java - Programmation

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?  
 

Citation :

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;  
 }

Reply

Marsh Posté le 20-02-2012 à 14:11:20   

Reply

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 :
  1. public interface State {
  2. public static String OK = "OK";
  3. public static String ERROR = "ERROR";
  4. public static String EXPIRED = "EXPIRED";
  5.         // ...
  6. public String name();
  7. }


implémenté par exemple par OK

Code :
  1. public class OK implements atransformer.State {
  2. public  String name(){
  3.  return State.OK;
  4. }
  5. }


ou ERROR

Code :
  1. public class EXPIRED implements atransformer.State {
  2. public String name(){
  3.  return State.EXPIRED;
  4. }
  5. }


 
Tu auras des méthodes convertState

Code :
  1. static public machin.State convertState(OK ok){
  2.    return new StateVision("OK" );
  3. }
  4. static public machin.State convertState(EXPIRED expired){
  5.    return new StateVision("EXPIRED" );
  6. }


 
Pour tester :

Code :
  1. OK ok = new OK();
  2. StateVision visionOk = convertState(ok);
  3. System.out.println(visionOk.vision); // affiche OK
  4. ERROR er = new  ERROR();
  5. StateVision visionEr = convertState(er);
  6. 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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed