Каков наилучший способ реализации `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?

НОТА: я делаюне намереваться этот вопрос быть субъективным. Моя просьба о "Лучший" реализация - это условное обозначение запроса самой быстрой, чистой и удобной в обслуживании реализации.

Ответы на вопрос(2)

Ваш ответ на вопрос