Перечисления Java против констант для строк - PullRequest
2 голосов
/ 14 марта 2010

Я перешел от использования констант для строк к использованию перечислений. Много раз мне нужно String представление перечисления (для регистрации, чтобы перейти к API, который требует String и т. Д.).

С помощью String констант вы можете просто передать значение String, но с перечислениями вы должны вызвать toString(). Есть ли способ, которым вы можете по умолчанию использовать значение String при предоставлении переменной enum?

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

Ответы [ 2 ]

9 голосов
/ 14 марта 2010

Вы должны полностью принять enum и вообще не использовать представление String. Используйте toString() только для генерации сообщений, журналов и т. Д., Но внутренне вы захотите работать с enum. Любые операции Map, Set и т. Д. Должны выполняться с типом enum, который гарантирует правильную сериализацию, шаблон синглтона и все остальное, что должны иметь типы enum.

В вашем фрагменте:

 Object o = map.get(Options.OPTION_1);
 //This won't work as intended if the Map key is a String

Помимо ошибки времени компиляции, вам действительно нужно задаться вопросом, должен ли ключ карты вообще иметь тип String. То, как вы используете его, похоже, это должно быть Map<Options, Something>.

8 голосов
/ 14 марта 2010

Есть много веских причин для использования Enum в Java. Но нет, если вам нужен только String.

Например, если вы представляете конкретный набор сущностей и не хотите, чтобы они были эквивалентны типу с другими типами вещей (например, String s), тогда подойдет Enum. Более того, если вы собираетесь вызывать функции, которые управляют ими и различаются в зависимости от конкретного экземпляра.

С другой стороны, если вас интересует только значение String чего-то, то нет ничего плохого в константе String.

Из того, что вы написали, я не могу сказать, каков вариант использования. Есть ли какая-то причина, по которой вам нужно использовать Enum здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...