在枚举中声明常量

sta*_*kov 8 java enums constants

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

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

不幸的是,不能这样做.到目前为止我提出的最佳解决方案是声明一个嵌套的接口来存储常量......

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*rey 8

我会用一个enum用于Categories为好.如果将它放在顶级课程中,它看起来很自然.

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

AFAIK这样做是为了简化语法.首先使用特殊的简化语法,然后是您定义的常量,使用枚举值.当你开始在常量中重写方法时,对此的需求更加明显.