2013-02-24 3 views
4
private enum CLASS {FMAN, SOPH, JUN, SEN, GRAD, ERROR}; 

private CLASS stringToClass(String t){ 

    switch(CLASS.valueOf(t)) 
    { 
    case FMAN: return CLASS.FMAN; 
    case SOPH: return CLASS.SOPH; 
    case JUN: return CLASS.JUN; 
    case SEN: return CLASS.SEN; 
    case GRAD: return CLASS.GRAD; 
    default: 
     System.out.println("NOT VALID CLASS. ERROR"); 
     return CLASS.ERROR; 
    } 
} 

Итак, у меня есть этот кусок кода прямо здесь. Во время построения у меня есть этот метод для возврата соответствующих значений из заданной строки t.Enum Switch statement Java 6 «Default» case

Мой вопрос: скажем, что «t» заканчивается «CSE». Как мне это обработать и в основном вернуть значение CLASS.ERROR.?

Это на Java 6, а не 7.

+4

Calling перечисление класса ... ой мой мозг. –

+0

Я знаю, что знаю. Это может сбить с толку. Плохое имя с моей стороны. Но у меня уже есть классификация, принятая в моем коде. – Ezrb3zr

+0

Ну, если t заканчивается как «CSE», например, потому что CLASS.CSE не существует, он не возвращает CLASS.ERROR, как предполагалось. Вместо этого я получаю сообщение об ошибке, говоря, что CLASS.CSE не существует. – Ezrb3zr

ответ

7

Вот лучший способ написать это:

private CLASS stringToClass(String t){ 
    try { 
     return CLASS.valueOf(t); 
    } catch (InvalidArgumentException ex) { 
     return CLASS.ERROR; 
    } 
} 

Оператор переключателя является излишним ... и это на самом деле делает ваш код более хрупким, «потому что вы должны помнить обновить список случая, если добавить новые значения до enum.


Я хотел бы также отметить пару стилистических зверствах в вашем коде:

  • Вызов перечислимую «КЛАСС» ужасно вводящим в заблуждение.
  • Вы используете неправильный идентификатор. Все имена типов должны быть написаны с использованием верблюжьего чехла и начинаться с прописной буквы. (Имена, которые аббревиатуры можно рассматривать как исключительный, но класс не аббревиатура.)

Я знаю, что я знаю. Это может сбить с толку. Плохое имя с моей стороны. Но у меня уже есть классификация, принятая в моем коде.

Да ... хорошо, измените его на что-то еще. Использовать ваше воображение. Но не нарушайте правила стиля.

2

согласен с ответом StevenC, но я бы:

  • переименовать перечисление на более стилистически приемлемого имени
  • валок метод в перечислении
  • переименовать метод, так что имеет смысл в контексте от имени класса перечисления
  • имя параметра Исключения ignore (обычный способ указать, что он игнорируется)
  • удалить из класса квалификационного перечисления имя из w Ith методом

Оставляя это:

private enum ClassLevel { 
    FMAN, SOPH, JUN, SEN, GRAD, ERROR; 

    static ClassLevel parseString(String t) { 
     try { 
      return valueOf(t); 
     } catch (InvalidArgumentException ignore) { 
      return ERROR; 
     } 
    } 
} 
+0

'parseString' должен быть объявлен для возврата' ClassLevel'. – Genzer

+0

@ Genzer Упс! Спасибо за это. (Исправлено сейчас) – Bohemian