Каков наилучший способ реализации `next` и` previous` для типа enum?
Предположим, у меня есть перечисление:
enum E {
A, B, C;
}
Как показано вэтот ответ отlucasmoЗначения enum хранятся в статическом массиве в том порядке, в котором они были инициализированы, и вы можете позже получить (клон) этот массив с помощью.E.values()
Теперь предположим, что я хочу реализоватьE#getNext
а такжеE#getPrevious
так что все следующие выражения оцениваются как:true
E.A.getNext() == E.B
E.B.getNext() == E.C
E.C.getNext() == E.A
E.A.getPrevious() == E.C
E.B.getPrevious() == E.A
E.C.getPrevious() == E.B
Моя текущая реализация дляgetNext
является следующим:
public E getNext() {
E[] e = E.values();
int i = 0;
for (; e[i] != this; i++)
;
i++;
i %= e.length;
return e[i];
}
и аналогичный метод для.getPrevious
Однако этот код в лучшем случае кажется громоздким (например, "пустой» for
петля, спорно злоупотребление переменного счетчика, и, возможно, ошибочно, в худшем (мышлении отражения, возможно).
Что было бы лучшим способом для реализацииgetNext
а такжеgetPrevious
методы для перечисления типов в Java 7?
НОТА: я делаюне намереваться этот вопрос быть субъективным. Моя просьба о "Лучший" реализация - это условное обозначение запроса самой быстрой, чистой и удобной в обслуживании реализации.