假设我有一个枚举:
enum E {
A, B, C;
}
如lucasmo by lucasmo所示,枚举值按照它们被初始化的顺序存储在静态数组中,您可以稍后用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循环,可计数滥用计数器变量,并且在最坏的情况下可能是错误的(思考反思,可能)。
在Java 7中为枚举类型实现getNext和getPrevious方法的最佳方法是什么?
注意:我不打算这个问题是主观的。我对“最好”实现的请求是要求最快,最干净,最可维护的实现的简写。