假设我有一个枚举:
enum E {
A, B, C;
}
如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
注意:我不希望这个问题是主观的。我对“最佳”实现的要求是要求最快、最干净和最可维护的实现的简写。