Значения в моем enum
- это слова, в которых должны быть пробелы, но перечисления не могут содержать пробелов в своих значениях, поэтому все они сгруппированы. Я хочу переопределить toString()
добавление этих пробелов там, где я это скажу.
Я также хочу, чтобы перечисление предоставляло правильное перечисление, когда я использую valueOf()
ту же строку, в которую я добавил пробелы.
Например:
public enum RandomEnum
{
StartHere,
StopHere
}
Вызов toString()
на RandomEnum
значение которого StartHere
возвращается строка "Start Here"
. Вызов valueof()
той же строки ( "Start Here"
) возвращает значение перечисления StartHere
.
Как я могу это сделать?
Ответы:
Вы можете попробовать этот код. Поскольку вы не можете переопределить
valueOf
метод, вам необходимо определить собственный метод (getEnum
в приведенном ниже примере кода), который возвращает нужное вам значение, и изменить своего клиента на использование этого метода.источник
Попробуйте, но я не уверен, что это сработает везде :)
источник
Вы можете использовать статическую карту в своем перечислении, которая сопоставляет строки с константами перечисления. Используйте его в статическом методе getEnum. Это избавляет от необходимости перебирать перечисления каждый раз, когда вы хотите получить одно из его значения String.
Просто убедитесь, что статическая инициализация карты происходит под объявлением констант перечисления.
Кстати, этот тип ImmutableMap взят из Google guava API, и я определенно рекомендую его в подобных случаях.
РЕДАКТИРОВАТЬ - Согласно комментариям:
источник
RestartHere("replay"), ReplayHere("replay")
или вообще без «значения»PauseHere, WaitHere
(т.е. enum имеет конструктор по умолчанию, например,private RandomEnum() { this.strVal = null; }
Как насчет реализации Java 8? (null можно заменить вашим Enum по умолчанию)
Или вы можете использовать:
источник
Я не думаю, что вам удастся заставить valueOf ("Начать здесь") работать. Но что касается пробелов ... попробуйте следующее ...
источник
Ниже приводится хорошая общая альтернатива valueOf ().
источник
compareTo()
более элегантного, чемequals()
для строк?.equals()
все подойдет. Можете использовать,==
если хотите. (Хотя есть веская причина не делать этого, если вы когда-нибудь заменяете перечисление классом.)У вас все еще есть возможность реализовать в своем перечислении следующее:
источник