Получения определения состояния столбца


Я точно знаю, как я бы справиться с этим в PHP, питон, JS, и как, но хочу подтвердить, что это правильный подход для перечисления в Java.

У меня есть представление базы данных, которая содержит столбец статус. У него имеется только одно из четырех значений (в MySQL, я бы сделал это перечислимый тип столбца, но типа не очень важно в контексте текущей). Каждый из которых сопоставляется с одним из значений, определенных ниже.

public enum StatusDefinitions {
    NOT_STARTED("not started"), 
    IN_PROGRESS("in progress"), 
    COMPLETE("opted out"), 
    OPTED_OUT("complete");

    private String desc;

    private StatusDefinitions(String desc)
    {
        this.desc = desc.toLowerCase();
    }

    public String getDescription()
    {
        return desc;
    }

    public static StatusDefinitions getStatus( String desc )
    {
        desc = desc.toLowerCase();
        for( StatusDefinitions it: StatusDefinitions.values() )
        {
            if( it.getDescription().equals( desc ) ) return it;
        }
        return StatusDefinitions.NOT_STARTED;
    }
}

Сейчас, на мой ЖСП, я петли для(StatusDefinitions это: StatusDefinitions.значения()) и выбран="выбран" на основе если(modelObjStatus == это). Если потянуть эту с/толкая его к БД, у меня есть статус = StatusDefinitions.метод getstatus( РС.метода getString( "статус" ) );. И там, где у меня есть такое ощущение, что я что-то пропустил. Циклический перебор всех строк и сравнивая их, кажется, я теряю пособие на перечисление. Это почти кажется, лучше иметь серию общедоступные статические заключительные строки.

(Прежде чем кто-нибудь спросит, из-за рамки данного конкретного проекта, не имеет смысла, чтобы сделать это ОРМ.)



208
3
задан 13 июня 2011 в 07:06 Источник Поделиться
Комментарии
1 ответ

Начнем с того, что это не хорошо:

COMPLETE("opted out"), 
OPTED_OUT("complete");

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


  1. Если убыванию идет из базы данных, вы можете иметь риск NullPointerException, если он приходит как null сразу.

  2. Вместо зацикливания и поиск, вы можете создать карту с Описание Еще значение и использовать его каждый раз. Поскольку ваш набор значений настолько мала, разница в производительности-это, вероятно, минимальный, поэтому это вопрос вкуса.

6
ответ дан 13 июня 2011 в 07:06 Источник Поделиться