2010-05-14 2 views
7

У меня есть Enum, который содержит определенный метод типа возвращаемого типа «String», Float, список, Double и т.д.Перечисления, использование в случае переключения

я буду использовать его в случае переключателя отчетности. Например мой перечисление

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

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

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

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

Может кто-то пожалуйста, помогите мне осуществить это?

ответ

17

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

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

+0

Это именно то, что я искал. Возможно ли иметь проверку ignorecase для MethodType.valueOf? – Apps

+0

Спасибо всем за предоставление справки. – Apps

+0

Просто добавлена ​​строка для нечувствительности к регистру. – tangens

5

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

public enum MethodType { ... } 

public MethodType myMethod; 

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

Edit:

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

+0

Но в моем случае я получу значение на основе ключа из файла свойств. Например, мое значение будет «String», мне нужно использовать его в случае коммутатора. Есть ли альтернативный подход к этому. Не могли бы вы дать мне знать? – Apps

+0

Я не совсем уверен, что понимаю, что вы имеете в виду. Если вы ищете больше пар ключ/значение, вы можете использовать словарь вместо этого. Если вы хотите узнать, какой тип имеет значение, например, если var * is * a double, код будет 'if (var double) {// do stuff}' – JYelton

3

Вам не нужен переключатель вообще (это в 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"); 
     } 
    } 
+0

И есть также ограничение, которое соответствует строке представление методаType. Если это проблема, вы можете определить абстрактный метод stringRepresentation и реализовать его для каждого MethodType – StevenWilkins

+1

Это именно то, что делает статический метод 'valueOf (String) всех перечислений, например. 'MethodType.valueOf (" DOUBLE ") == MethodType.DOUBLE'. – ZoogieZork

+0

@ ZoogieZork - Ты прав, отличная точка, полностью соскользнул с ума. – StevenWilkins

5

Это может быть немного ближе к тому, что вам нужно. Вы можете сделать свойство 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); 
    } 
} 
Смежные вопросы