Ненулевые Перечисления как ненулевые Объекты? - PullRequest
1 голос
/ 01 марта 2011

У меня есть код, который получает значение для перечисления:

StringUtils.isEmpty(getEnumMember().value());

Вспомогательный код выглядит следующим образом:

public CustomEnum getEnumMember() {
    return enumMember;
}

----

public enum CustomEnum {

    TEXT1("text1"),
    TEXT2("text2"),
    TEXT3("text3");

    private final String value;

    CustomEnum(String v) {
        value = v;
    }

    public String value() {
        return value;
   }

   ...
}

Мне интересно, есть ли способ для getEnumMemberобрабатывать нулевые перечисления таким же образом, как я могу обрабатывать нулевые объекты.Например:

public CustomEnum getEnumMember() {
    if (enumMember ==null) {
        return new CustomEnum();
    }
    return enumMember;
}

Но я не могу создать экземпляр "нового CustomEnum".Как бы вы справились с этим, чтобы getEnumMember () не возвращал ноль?Я бы предпочел не создавать специального значения перечисления для "ENUM_IS_NULL (" ")".

Ответы [ 2 ]

8 голосов
/ 01 марта 2011

Когда вы создаете перечисление, вы говорите, что любая переменная этого типа будет иметь одно из определенного списка значений или быть нулевой. Это неизбежно. Таким образом, вы должны либо принять нулевое значение, либо определить соответствующее значение - будь то одно из существующих значений перечисления или новое, которое вы добавляете. Это ваши единственные варианты. Код return new CustomEnum(); просто не имеет смысла; Вы должны выбрать одно из перечисленных значений и указать, какое из них.

3 голосов
/ 01 марта 2011

Не может быть сделано. Частью идеи перечисления является то, что все возможные значения перечислены, и вы не можете просто добавить больше.

Вам либо нужно сделать:

public enum CustomEnum {

    TEXT1("text1"),
    TEXT2("text2"),
    TEXT3("text3"),
    ENUM_IS_NULL("");
   ...
}

или

StringUtils.isEmpty(getEnumMember() == null? "" : getEnumMember().value());

или ручка NullPointerException с в StringUtils.isEmpty

...