Метод ordinal()
возвращает порядковый номер экземпляра перечисления.
Как установить порядковый номер для перечисления?Могу ли я указать порядковый номер для перечисления в Java?
ответ
Вы не можете установить его. Он всегда является порядком постоянного определения. Смотрите documentation for Enum.ordinal():
Возвращает порядковый номер этой константы перечисления (его положение в своем перечислений декларации, в которой начальная константа присваивается порядковый номер, равный нулю). Большинство программистов не будут использовать этот метод. Он предназначен для использования сложными структурами данных на основе enum, такими как EnumSet и EnumMap.
И на самом деле - вам не нужно. Если вам нужно какое-то целочисленное свойство, определите его.
Вы можете управлять порядком, изменив порядок перечисления, но вы не можете его явно указать в C++
. Один из способов заключается в предоставлении дополнительного метода в вашем перечислении на номер, который вы хотите:
enum Foo {
BAR(3),
BAZ(5);
private final int val;
private Foo(int v) { val = v; }
public int getVal() { return val; }
}
В этой ситуации BAR.ordinal() == 0
, но BAR.getVal() == 3
.
+1 кроме этого ISN На самом деле это обходной путь. это желаемое поведение. порядковое значение считается артефактом реализации; если вы хотите назначить целое или другое значение, это то, что «перечисления являются кланами» настолько велики ... – andersoj
would not BAR.ordinal() return 0 индексы afaik enum основаны на нуле – Terraego
@Terraego Хороший улов. – Matt
От http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html
общественное окончательное ИНТ порядковое() Возвращает порядковый номер этой константы перечисления (его положение в своем перечислений декларации, в которой начальная константа присваивается порядковый номер, равный нулю). Большинство программистов не будут использовать этот метод. Он предназначен для использования сложными структурами данных на основе enum, такими как EnumSet и EnumMap.
Возвращает: порядкового этого перечисления постоянной
Если у вас есть
день общественное перечисление { воскресенье, понедельник, вторник, среда, Четверга, Пятницы, Субботы }
then SUNDAY имеет порядковый номер 0, ПОНЕДЕЛЬНИК 1, и так далее ...
ortinal не гарантирует получение заказа по которому выше! – claj
@claj, можете ли вы немного расшириться? Как представляется, документация указывает на это. – Celos
Извините @Celos, первое перечисление действительно 0, но спецификация не упоминает, как значение должно быть назначено вообще, кроме монотонно возрастающего. Я думаю, что я кое-что прочитал об этом предостережении в Эффективной Java или так, но не задумываюсь об этом. – claj
Ознакомьтесь с Java Enum examples и docs
Возвращает порядковый номер этой константы перечисления (его положение в своем перечислений декларации, в которой начальная константа присваивается порядковый номер, равный нулю). Большинство программистов не будут использовать этот метод. Он предназначен для использования сложными структурами данных на основе enum, такими как EnumSet и EnumMap.
Легкий ответ: просто измените порядок констант. Первое задано будет 0, второе будет равно 1 и т. Д. Однако это может быть нецелесообразным, если вы постоянно меняете код, или перечисления будут много разных значений. Вы можете определить настраиваемый метод для работы с порядковым номером по умолчанию, но СДЕЛАЙТЕ, что он хорошо документирован, чтобы избежать путаницы!
public enum Values
{
ONE, TWO, THREE, FOUR;
public int getCustomOrdinal()
{
if(this == ONE)
{
return 3;
}
else if(this == TWO)
{
return 0;
}
...
}
}
+1: Оператор switch может быть лучше, чем ряд операторов if-else. –
Мне не нравится это решение. Перечисления являются классами и поэтому могут содержать пользовательские свойства. Я бы предпочел правильно определить поле для этого и соответствующий метод getter. – Atmocreations
Это лучшее решение в целом. Но вопрос спросил, можно ли изменить поведение порядка (0 ... – donnyton
Вы можете обновить порядковое с помощью отражения:
private void setEnumOrdinal(Enum object, int ordinal) {
Field field;
try {
field = object.getClass().getSuperclass().getDeclaredField("ordinal");
field.setAccessible(true);
field.set(object, ordinal);
} catch (Exception ex) {
throw new RuntimeException("Can't update enum ordinal: " + ex);
}
}
Как принятый ответ указывает, вы не можете установить порядковый номер. Ближайшее вы можете получить это с настраиваемым свойством:
public enum MonthEnum {
JANUARY(1),
FEBRUARY(2),
MARCH(3),
APRIL(4),
MAY(5),
JUNE(6),
JULY(7),
AUGUST(8),
SEPTEMBER(9),
OCTOBER(10),
NOVEMBER(11),
DECEMBER(12);
MonthEnum(int monthOfYear) {
this.monthOfYear = monthOfYear;
}
private int monthOfYear;
public int asMonthOfYear() {
return monthOfYear;
}
}
- 1. Получить порядковый номер перечисления в цикле [C#]
- 2. Как найти порядковый номер перечислителя внутри перечисления?
- 3. Как указать порядковый номер для документов в openerp v7.0?
- 4. Java PriorityBlockingQueue FIFOEntry порядковый номер
- 5. Java: Как я могу считать серийный номер в типе перечисления?
- 6. Преобразуйте порядковый номер в номер
- 7. порядковый номер последовательности заказов
- 8. Порядковый номер 968 номер
- 9. Talend Второй Порядковый номер
- 10. Как я могу вставить порядковый номер автоматически в Oracle Sql?
- 11. Как создать упорядоченный порядковый номер в java
- 12. порядковый номер в TCP
- 13. Могу ли я использовать побитовое ИЛИ для Java Перечисления
- 14. SAS порядковый номер для ID
- 15. Могу ли я использовать linq для объединения двух наборов результатов в порядковый номер/индекс #?
- 16. TCP порядковый номер пакета
- 17. получить порядковый номер для моделируемого пакета rtp
- 18. MD5 и порядковый номер
- 19. DataGridViewRow порядковый номер
- 20. Matlab/октава порядковый номер
- 21. Bash истинный порядковый номер
- 22. заказ порядковый номер форматирования
- 23. нужно порядковый номер для строк в запросе
- 24. Узнайте порядковый номер шаблона
- 25. Тип: Неявный номер для перечисления перечисления
- 26. Первичный ключ Порядковый номер
- 27. порядковый номер оракула?
- 28. Автоматический порядковый номер для mySQL INSERT
- 29. генерации порядковый номер
- 30. sql 2008 добавить порядковый номер
Если я могу указать порядковый номер перечисления, когда использовать JPA с перечислением, который будет более безопасным ... –