相关疑难解决方法(0)

在枚举类型上实现`next`和`previous`的最佳方法是什么?

假设我有一个枚举:

enum E {
    A, B, C;
}
Run Code Online (Sandbox Code Playgroud)

正如所示这个答案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
Run Code Online (Sandbox Code Playgroud)

我目前的实施getNext如下:

public E getNext() {
    E[] e = E.values();
    int i = 0;
    for (; e[i] != this; i++)
        ;
    i++;
    i %= e.length;
    return e[i];
}
Run Code Online (Sandbox Code Playgroud)

和类似的方法getPrevious.

然而,这段代码充其量似乎很麻烦(例如,"空" for循环,可论证滥用计数器变量,并且最坏的可能是错误的(可能反思).

在Java 7中实现枚举类型的最佳方法getNextgetPrevious …

java optimization enums

53
推荐指数
2
解决办法
2万
查看次数

标签 统计

enums ×1

java ×1

optimization ×1