【问题标题】:Declare constants inside of enum在枚举中声明常量
【发布时间】:2014-06-30 17:45:06
【问题描述】:

我想创建一个枚举并在其中声明几个常量供内部使用...

public enum SearchType {

    static final String TEXT = "text";
    static final String BOOLEAN = "boolean";

    STARTS_WITH(TEXT),
    ENDS_WITH(TEXT),
    CONTAINS(BOOLEAN),
    WILDCARD(TEXT),
    REGEXP(TEXT),
    RANGE(TEXT)


    private String searchType;

    private SearchType(String type) {
        searchType = type;
    }

}

不幸的是,它不能以这种方式完成。到目前为止我想出的最佳解决方案是声明一个嵌套接口来存储常量......

public enum SearchType {

    STARTS_WITH(Categories.TEXT),
    ENDS_WITH(Categories.TEXT),
    CONTAINS(Categories.BOOLEAN),
    WILDCARD(Categories.TEXT),
    REGEXP(Categories.TEXT),
    RANGE(Categories.TEXT)


    interface Categories{
        static final String TEXT = "text";
        static final String BOOLEAN = "boolean";
    }

    private String searchType;

    private SearchType(String type) {
        searchType = type;
    }

}

所以我想知道是否有更好的方法?

【问题讨论】:

    标签: java enums constants


    【解决方案1】:

    我也会将enum 用于Categories。如果你把它放在*类中,它看起来会很自然。

    您必须在任何其他常量之前定义您的enum 值。

    AFAIK 这样做是为了简化语法。您首先使用特殊的简化语法获得枚举值,然后是您定义的常量。当您开始覆盖常量中的方法时,对此的需求会更加明显。

    【讨论】:

    • 谢谢!它甚至可以作为嵌套枚举(至少编译)