Перечисления, используйте в случае переключателя

Мне определили Перечисление, которое содержит тип возврата метода как "Строка", Плавание, Список, дважды и т.д.

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

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

В файле свойств у меня есть пары значения ключа следующим образом. Test1=String Test2=Double

В моем коде я получаю значение для ключа. Я должен использовать ЗНАЧЕНИЕ в Случае Переключателя для Определения Типа, и на основе этого я должен реализовать некоторую логику. Например, что-то вроде этого

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

Кто-то может помочь мне реализовать это?

8
задан dbyrne 14 May 2010 в 17:45
поделиться

4 ответа

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

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 ()) .

23
ответ дан 5 December 2019 в 04:58
поделиться

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

public enum MethodType { ... }

public MethodType myMethod;

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

Edit:

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

5
ответ дан 5 December 2019 в 04:58
поделиться

Это может быть немного ближе к тому, что вам нужно. В этом случае вы можете сделать свойство 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);
  }
}
6
ответ дан 5 December 2019 в 04:58
поделиться

Вам вообще не нужен переключатель (он есть в 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");
        }
    }
3
ответ дан 5 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: