Как мне преобразовать String в enum для оператора switch? - PullRequest
1 голос
/ 26 апреля 2011

У меня есть этот код, где я хочу принять командную строку args fx "12 EUR", чтобы сделать преобразование:

public class Main {

   enum Currency {EUR, USD, GBP,INVALID_CURRENCY;
   static final float C_EUR_TO_DKK_RATE = (float) 7.44;
   static final float C_USD_TO_DKK_RATE = (float) 5.11;
   static final float C_GBP_TO_DKK_RATE = (float) 8.44;
   static float result = 0;
   static int amount = 0;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // Q1

        if (args.length == 2) {
            amount = Integer.parseInt(args[0]);
            String currencyIn = args[1].toString();

            Currency enumConversion = currencyIn; //**<---- HERE**
            switch (enumConversion) {
                case EUR:
                    result = amount * C_EUR_TO_DKK_RATE;
                    break;
                case USD:
                    result = amount * C_USD_TO_DKK_RATE;
                    break;
                case GBP:
                    result = amount * C_GBP_TO_DKK_RATE;
                    break;
                default:
                    result = 0;
                    break;
            }
            System.out.println((float) amount + " " + enumConversion + " converts to "
                + Math.round(result*100.0)/100.0 + " DKK");


        } else {
            System.out.println("Invalid arguments!");
            System.exit(1);
        }
    }

}
   }

Как мне преобразовать String currencyIn в enum, чтобы я мог использовать ввод аргументовв операторе switch?

Ответы [ 2 ]

6 голосов
/ 26 апреля 2011

Из javadocs есть метод, который можно использовать для этого.

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 

т.е.

Currency enumConversion = Currency .valueOf(currencyIn); //**<---- HERE**

В качестве случайного примечания,Я почти всегда добавляю iValueOf (т. Е. Нечувствительную к регистру версию) метод в мои перечисления для простоты использования.

2 голосов
/ 26 апреля 2011
public Currency fromString(String s){
  try
  {
    return Currency.valueOf(s)
  }
  catch(IllegalArgumentException e)
  { 
    return null;
  }
}
...