Java утверждает, что порядковое начального значения 0. Могу ли я считать, что, когда я создаю перечисление как это:Можно ли считать, что перечисления Java автоматически увеличиваются на 1?
public enum Direction {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, ...}
То, что порядковое TUESDAY
всегда 1, что из WEDNESDAY
всегда 2, .. .?
Я буду более конкретным. Я объявляю перечисление:
public enum Direction {UP,RIGHT,DOWN,LEFT}
Теперь есть способ поворота на 90 градусов (по часовой стрелке). Это одна линии с порядковыми:
direction = Direction.values()[direction.ordinal()+1 % Direction.values().length];
Если бы я не использовать порядковый я бы использовать операторы переключателя или условия:
switch (direction) {
case LEFT:newdirection = Direction.UP;
break;
etc...
}
Есть несколько преимуществ использования порядковых:
- сокращенный код
- более быстрый код (неграмотный)
- если направление (например,
DOWN_LEFT
) реализация не обязательно должна изменяться, если вы положили новое направление в нужное место
Как вы думаете?
Если это имеет значение (например, для пользовательской сериализации), в любом случае вам будет лучше с явным сопоставлением. Просто создайте 'EnumMap 'или дайте' Direction' поле 'int'. –
Я предпочел бы держать его в чистоте. Это для школы, но технически мы еще не использовали перечисления, и EnumMap может быть немного экстремальным, поскольку мы еще не узнали о массивах: D. – Fatso
Ваше понятие о чистоте немного ошибочно :-). Опираясь на порядковый номер, было бы очень грязным способом кодировать это. –