У меня есть перечисление на Java:
public enum Months
{
JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
}
Я хочу получить доступ к значениям перечисления по индексу, например
Months(1) = JAN;
Months(2) = FEB;
...
Как мне это сделать?
Month
встроенный enum.Ответы:
Попробуй это
источник
public static final ArrayList<Months> ALL = new ArrayList<Month>() {{ for (Months m : Months.values()) add(m); }};
тогда вы можете получить доступ к элементам с помощьюMonths i = ALL.get(index)
Вот три способа сделать это.
источник
public static
изменяемый (как массив, так и не-final
). Эйв. И этоIllegalArgumentException
имело бы гораздо больший смысл, чем возвращениеnull
бомбы.Я просто попробовал то же самое и пришел к следующему решению:
У класса есть собственные значения, сохраненные внутри массива, и я использую массив, чтобы получить перечисление в позиции индекса. Как упоминалось выше, массивы начинают отсчет с 0, если вы хотите, чтобы ваш индекс начинался с «1», просто измените эти два метода на:
Внутри моей Main я получаю необходимые страны-объект с помощью
который устанавливает currCountry равным последней стране, в данном случае Country.KENTUCKY.
Просто помните, что этот код сильно зависит от ArrayOutOfBoundsExceptions, если вы используете жестко запрограммированные индикаторы для получения ваших объектов.
источник
Недавно у меня была такая же проблема, и я использовал решение, предоставленное Гарри Джоем. Это решение работает только с перечислением с нуля. Я бы также не стал считать это спасением, поскольку он не работает с индексами, выходящими за пределы допустимого диапазона.
Решение, которое я использовал, может быть не таким простым, но оно полностью сохраняет и не повредит производительности вашего кода даже с большими перечислениями:
Если вы уверены, что никогда не выйдете за пределы диапазона своего индекса, и не хотите использовать,
UNKNOWN
как я сделал выше, вы, конечно, также можете сделать:источник