如何在枚举类型上实现`next`和`previous`的最佳方法是什么?
- 论坛
- 如何在枚举类型上实现`next`和`previous`的最佳方法是什么?
16 浏览
如何在枚举类型上实现`next`和`previous`的最佳方法是什么?
假设我有一个枚举:
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
方法的方式是什么?
注意:我并不打算让这个问题是主观的。我对“最佳”实现的请求是为了寻求最快、最清晰和最易维护的实现方式。