在枚举类型上实现“下一个”和“上一个”的最佳方法是什么?
2022-08-31 14:58:44
假设我有一个枚举:
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
注意:我不打算让这个问题是主观的。我对“最佳”实现的要求是要求实现最快,最干净,最易于维护的实现的简写。