8
votes

Enums, utiliser dans un étui de commutation

J'ai un énumé défini qui contient le type de retour de la méthode comme "chaîne", flotter, liste, double etc.

Je l'utiliserai dans les relevés de cas de commutation. Par exemple, mon énumé est xxx

dans un fichier de propriété, j'ai des paires de valeur clé comme suit. Test1 = chaîne Test2 = Double

dans mon code Je reçois la valeur de la clé. Je dois utiliser la valeur dans l'étui de commutation pour déterminer le type et sur la base de celle que je dois mettre en œuvre une logique. Par exemple, quelque chose comme celui-ci xxx

peut m'aider à mettre en œuvre cela?


0 commentaires

4 Réponses :


5
votes

Vous avez défini l'énum, ​​mais vous devez définir une variable que est ce type. Comme ceci: xxx

edit:

précédemment, cet extrait utilisé var comme nom de variable, mais c'est un mot-clé réservé. Changé en MyMethod .


2 commentaires

Mais dans mon cas, j'aurai la valeur basée sur la clé du fichier de propriétés. Par exemple, ma valeur sera "chaîne", je dois l'utiliser dans le boîtier de commutation. Y a-t-il une approche alternative à cela? Pourriez vous me laisser savoir s'il vous plait?


Je ne suis pas totalement sûr de comprendre ce que vous voulez dire. Si vous recherchez plus de paires de clé / valeur, vous voudrez peut-être utiliser un dictionnaire. Si vous souhaitez voir quelle valeur de type A est, par exemple si Var est un double, le code serait si (var est double) {// fait des choses}



3
votes

Vous n'avez pas besoin d'un commutateur du tout (c'est-à-dire Java BTW afin de ne pas fonctionner pour vous): évidemment, vous voudrez ajouter des chèques nuls, une meilleure manipulation des exceptions, etc.

public enum MethodType {

        String,LONG,DOUBLE,THING;

        static MethodType fromString(String x) throws Exception {
            for (MethodType currentType: MethodType.values()){
                if (x.equals(currentType.toString())){
                    return currentType;
                }
            }
            throw new Exception("Unmatched Type");
        }
    }


3 commentaires

Et il y a aussi la restriction que la chaîne correspond à la représentation de la méthodype. Si tel est un problème, vous pouvez définir une méthode abstraite stringrepresentation et la mettre en œuvre pour chaque méthodtype


C'est exactement ce que la valeur de (string) méthode statique de tous Enums fait, par ex. MéthodeType.Valueof ("Double") == MéthodeType.Double .


@ZOOGiezork - Vous avez raison, excellent point, a totalement glissé mon esprit.



23
votes

Je suppose que c'est ce que vous recherchez:

public class C_EnumTest {
    public enum MethodType {
        DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG;
    }
    public static void main( String[] args ) {
        String value = "DOUBLE";
        switch( MethodType.valueOf( value ) ) {
        case DOUBLE:
            System.out.println( "It's a double" );
            break;
        case LIST:
            System.out.println( "It's a list" );
            break;
        }
    }
}


3 commentaires

Ceci est exactement ce que je cherchais. Est-il possible d'avoir une vérification de l'ignorecase pour la méthodype.valueof?


Merci à tous d'avoir fourni l'aide.


Il suffit d'ajouter une ligne pour ne pas être sensible à la casse.



6
votes

Cela peut être un peu plus proche de ce dont vous avez besoin. Vous pouvez faire la propriété de propriétéName tout ce dont vous avez besoin pour être dans ce cas:

public enum MethodType {

  STRING("String"),
  LONG("Long"),
  DOUBLE("Double"),
  THING("Thing");

  private String propertyName;

  MethodType(String propName) {
    this.propertyName = propName;
  }

  public String getPropertyName() {
    return propertyName;
  }

  static MethodType fromPropertyName(String x) throws Exception {
    for (MethodType currentType : MethodType.values()) {
      if (x.equals(currentType.getPropertyName())) {
        return currentType;
      }
    }
    throw new Exception("Unmatched Type: " + x);
  }
}


0 commentaires