web-dev-qa-db-fra.com

Comment retourner une valeur enum en java

Comment puis-je retourner des enums comme ça? 

Avant, je renvoyais un int avec 0 si non, 1 si oui et 2 si autre. Mais ce n'était pas une bonne façon de faire. Alors, comment cela devrait-il être fait? Mon code:

class SomeClass{
   public enum decizion{
      YES, NO, OTHER
   }

   public static enum yourDecizion(){
      //scanner etc
      if(x.equals('Y')){
         return YES;
      }
      else if (x.equals('N')){
         return NO;
      }
      else{
         return OTHER;
      }
   }
}
5
Mathew

Je ne fais pas quoi le "// scanner etc." fait, mais le type de méthode return doit être decizion:

public static decizion yourDecizion() { ... }

De plus, vous pouvez ajouter les valeurs Y, N, etc. aux constantes enum:

public enum decizion{
     YES("Y"), NO("N"), OTHER;

     String key;

     decizion(String key) { this.key = key; }

     //default constructor, used only for the OTHER case, 
     //because OTHER doesn't need a key to be associated with. 
     decizion() { }

     decizion getValue(String x) {
         if ("Y".equals(x)) { return YES; }
         else if ("N".equals(x)) { return NO; }
         else if (x == null) { return OTHER; }
         else throw new IllegalArgumentException();
     }
}

Ensuite, dans la méthode, vous pouvez simplement faire:

public static decizion yourDecizion() {
    ...
   String key = ...
   return decizion.getValue(key);
}
7
Konstantin Yovkov

Changez votre code pour:

class SomeClass{
   public enum decizion {
      YES, NO, OTHER
   }

   public static decizion yourDecizion(){
      //scanner etc
      if(x.equals('Y')){
         return decizion.YES;
      }
      else if (x.equals('N')){
         return decizion.NO;
      }
      else{
         return decizion.OTHER;
      }
   }
}

Remarque: Le type de retour de la méthode doit être decizion au lieu de enum et decizion devrait avoir un nom en majuscule (comme toutes les classes le devraient). 

1
Axel

Je pense que vous devriez faire quelque chose comme ça, une classe d'énum. Ensuite, vous pouvez ajouter autant de types que vous voulez et la méthode yourDecizion () retournera le type enum en fonction du paramètre donné.

public enum SomeClass {

        YES(0),
        NO(1),
        OTHER(2);

    private int code;


    private SomeClass(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }

    public static SomeClass yourDecizion(int x) {
        SomeClass ret = null;
        for (SomeClass type : SomeClass.values()) {
            if (type.getCode() == x)
                ret = type;
        }
        return ret;
    }
}
1
Eduardo