Java enum overkill?

Zar*_*rdo 15 java enums

我经常需要一个可以表示为简单枚举类型的类的变量的情况,例如:

private enum PageOrder {DOWN_THEN_OVER, OVER_THEN_DOWN};
Run Code Online (Sandbox Code Playgroud)

如果在包含变量的类中声明枚举类型,那么我必须使用不合适的限定名称MyClass.PageOrder.但是如果我创建一个新类,我只有一个简单的枚举声明类,这对我来说似乎有些过分.

出于这个原因,我经常使用整数而不是枚举类型.

有关此主题的任何意见/建议吗?

aio*_*obe 34

你可以做

import static yourpkg.MyClass.PageOrder;
Run Code Online (Sandbox Code Playgroud)

这将始终有效,因为内部枚举始终是静态的.请注意,即使在定义MyClass类的文件中也是如此.

  • 您可以将Eclipse配置为自动插入静态导入. (4认同)
  • 对.正如[此处](http://stackoverflow.com/questions/288861/eclipse-optimize-imports-to-include-static-imports)所述. (2认同)

Old*_*eon 21

出于这个原因,我经常使用整数而不是枚举类型.

请不要这样做.

您通常可以选择父类的名称,enum这实际上有助于清晰的代码.

class Page {
    enum Order {
        DOWN_THEN_OVER, OVER_THEN_DOWN;
    }
}

// Accessing: A little verbose but clear and efficient.
Page.Order order = Page.Order.DOWN_THEN_OVER;
Run Code Online (Sandbox Code Playgroud)

您也可以使用static import每个enum,但我更喜欢上面的冗长.

import static com.oldcurmudgeon.test.Test.Order.DOWN_THEN_OVER;
import static com.oldcurmudgeon.test.Test.Order.OVER_THEN_DOWN;

public class Test {

    enum Order {

        DOWN_THEN_OVER, OVER_THEN_DOWN;
    }

    public void test() {
        Order pageOrder = DOWN_THEN_OVER;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果enum是的话,显然你不能采取这种方法private.

  • @JohnHenkel - `public static final int DOWN_THEN_OVER = 0; public static final int OVER_THEN_DOWN = 1; ... public static final int UP_THEN_AT_THEM = 92367;` - `turnPage(UP_THEN_AT_THEM)` - 你现在看到了危险吗?使用`enum`你就是不能这样做 - 即使是错误的. (2认同)