Enums, используйте в переключателе - PullRequest
8 голосов
/ 14 мая 2010

У меня определен Enum, который содержит тип возврата метода, такой как «String», Float, List, Double и т. Д.

Я буду использовать его в операторах регистра. Например, мое перечисление

public enum MethodType {
    DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG;
}

В файле свойств пары ключей и значений приведены ниже. Test1 = Строка Test2 = Double

В моем коде я получаю значение для ключа. Мне нужно использовать VALUE в Switch Case, чтобы определить тип и исходя из этого я должен реализовать некоторую логику. Например что-то вроде этого

switch(MethodType.DOUBLE){
     case DOUBLE:
        //Dobule logic
}

Может кто-нибудь помочь мне реализовать это?

Ответы [ 4 ]

21 голосов
/ 14 мая 2010

Я думаю, это то, что вы ищете:

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

Если вы не чувствительны к регистру, вы можете сделать MethodType.valueOf( value.toUpperCase() ).

6 голосов
/ 14 мая 2010

Это может быть немного ближе к тому, что вам нужно. Вы можете присвоить свойству propertyName все, что вам нужно в этом случае:

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);
  }
}
5 голосов
/ 14 мая 2010

Вы определили перечисление, но вам нужно определить переменную, которая равна этого типа. Как это:

public enum MethodType { ... }

public MethodType myMethod;

switch (myMethod)
{
    case MethodType.DOUBLE:
        //...
        break;
    case MethodType.LIST:
        //...
        break;
//...
}

Edit:

Ранее этот фрагмент использовал var в качестве имени переменной, но это зарезервированное ключевое слово. Изменено на myMethod.

3 голосов
/ 14 мая 2010

Вам вообще не нужен переключатель (это, кстати, в java, поэтому он может не сработать для вас): Очевидно, вы захотите добавить некоторые нулевые проверки, лучшую обработку исключений и т. Д.

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");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...