Java enum overkill?

时间:2014-09-24 09:48:54

标签: java enums

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

private enum PageOrder {DOWN_THEN_OVER, OVER_THEN_DOWN};

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

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

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

3 个答案:

答案 0 :(得分:34)

你可以做到

import static yourpkg.MyClass.PageOrder;

这将始终有效inner enums are always static。请注意,即使在定义MyClass类的文件中也是如此。

答案 1 :(得分: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;

您还可以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;
    }

}

如果enumprivate,显然你不能采用这种方法。

答案 2 :(得分:-2)

如果你使用enum只是为了给编号提供编码器友好名称,而你永远不必将它们写入屏幕,或者从文件中读取它们,那么这完全是一种过度杀伤力。不幸的是,java中的所有内容都必须是一个类。如果您正在使用枚举,我建议使用常量。

如果要以用户友好的格式打印枚举值,或者将值转换为枚举,则可能需要使用该类。