Java 为什么不能在枚举值内定义枚举

Java 为什么不能在枚举值内定义枚举,java,enums,Java,Enums,我想在一个枚举值中定义几个字符串常量,并在同一个枚举值的上下文中访问这些常量。例如。 以下是我的枚举定义: public enum EventType { QUERY_UPDATE { public String QUERY_LIST = "QUERY_LIST"; //this variable is not accessible in client code. }, SINGLE_RESULT_HANDLE { public stati

我想在一个枚举值中定义几个字符串常量,并在同一个枚举值的上下文中访问这些常量。例如。 以下是我的枚举定义:

public enum EventType {
    QUERY_UPDATE {
        public String QUERY_LIST = "QUERY_LIST"; //this variable is not accessible in client code.
    },
    SINGLE_RESULT_HANDLE {
        public static final String SINGLE_QUERY_OBJECT = "SINGLE_QUERY_OBJECT"; //this variable is not accessible in client code.
        public static final String SINGLE_QUERY_RESULT = "SINGLE_QUERY_RESULT";
    },
    COLLATED_RESULT_HANDLE {
         enum Keys{ //compiler error : The member enum Keys can only be defined inside a top-level class or interface or in a static context.
            COLLATED_RESULT_LIST,
        }
    };
}
在我的代码中,我希望使用以下枚举值:

//客户端代码

GenericEvent resultEvent = new GenericEvent(EventType.QUERY_UPDATE);
resultEvent.addContextProperty(EventType.QUERY_UPDATE.QUERY_LIST, "abcd"); //LINE 2

现在在上面的第2行(第一个参数)中,我想指定只属于EventType.QUERY\u UPDATE的字符串常量。但似乎没有办法做到这一点。请建议如何解决此问题

以前也曾提出过类似的问题,例如,和。您的问题的答案将是不要在枚举中嵌套枚举,而是提出一种替代设计。感谢@TimBiegeleisen,设计更改不会很整洁。我希望避免几个实现。IDE也像eclipse一样支持枚举值的快速列表。(Ctrl+Enter)。您能用您试图解决的业务问题的一些背景信息更新您的问题吗?确实有一种方法可以构建您所需的内容,但仅给出枚举定义会使这变得困难。您可以将keys声明移到COLLATED_RESULT_HANDLE常量之外,但移到EventType枚举内部。