JAVA Sub Enum声明

时间:2016-02-01 09:19:44

标签: java enums

我想从代码中的另一个枚举声明中访问枚举值,如下所示。但我无法宣布它,有没有办法在java中做到这一点。

LOOK_UP.BACKOFFICE_DEAFULT_RAPOR_DATE.LAST_FINISHED_MSPOT_TRADING_DATE

2 个答案:

答案 0 :(得分:2)

更改

BACKOFFICE_DEAFULT_RAPOR_DATE("BACKOFFICE_DEAFULT_RAPOR_DATE"); 
BACKOFFICE_QUERY_TYPE("BACKOFFICE_QUERY_TYPE"),

BACKOFFICE_DEAFULT_RAPOR_DATE("BACKOFFICE_DEAFULT_RAPOR_DATE"), // <--- comma
BACKOFFICE_QUERY_TYPE("BACKOFFICE_QUERY_TYPE"); // <--- semi colon
...

} // <--- missing closing curly brace at the end

完整代码:

public enum LOOK_UP {
    BACKOFFICE_DEAFULT_RAPOR_DATE("BACKOFFICE_DEAFULT_RAPOR_DATE"), // <--- (1)
    BACKOFFICE_QUERY_TYPE("BACKOFFICE_QUERY_TYPE"); // <--- (2)

    // no changes

    public enum LOOK_UP_OPTION {
        // no changes
    }
} // <--- (3)

答案 1 :(得分:1)

解决OP忽略代码

的评论的新材料

如果您有两个enumsOuterEnumInnerEnum,并且OuterEnum的字段类型为InnerEnum,那么您可以做些什么&# 39;重新谈论。简化,......

enum OuterEnum {
    OUTER1(InnerEnum.INNER1), OUTER2(InnerEnum.INNER2);
    public final InnerEnum myInner;
    private OuterEnum(InnerEnum inner) {
        this.myInner = inner;
    }
}

enum InnerEnum {
    INNER1, INNER2;
}

现在,您可以说OuterEnum.OUTER1.myInnerOuterEnum.OUTER2.myInner来获取InnerEnum所拥有的OuterEnum值。但你不能说OuterEnum.OUTER1.INNER1之类的东西。这没有任何意义。如果您知道自己需要INNER1,则应该说InnerEnum.INNER1

您可以InnerEnumenum内声明,OuterEnum成为真正的内enum,但同样的原则适用。如果您知道所需的精确值,请直接引用它。如果您想知道另一个public enum LOOK_UP { BACKOFFICE_DEAFULT_RAPOR_DATE("BACKOFFICE_DEAFULT_RAPOR_DATE", LOOK_UP_OPTION.LAST_FINISHED_MSPOT_TRADING_DATE), BACKOFFICE_QUERY_TYPE("BACKOFFICE_QUERY_TYPE", LOOK_UP_OPTION.STATIC_QUERY_TYPE); private String name; public final LOOK_UP_OPTION option; private LOOK_UP(String name, LOOK_UP_OPTION option){ this.name=name; this.option = option; } public String getName(){ return name; } public enum LOOK_UP_OPTION { LAST_FINISHED_MSPOT_TRADING_DATE(LOOK_UP.BACKOFFICE_DEAFULT_RAPOR_DATE ,"LAST_FINISHED_MSPOT_TRADING_DATE","LAST FINISHED MSPOT TRADING DATE"), STATIC_QUERY_TYPE(LOOK_UP.BACKOFFICE_QUERY_TYPE ,"STATIC_QUERY_TYPE","Static Query"); LOOK_UP look_up; private String code; private String label; //db miss match label and code private LOOK_UP_OPTION(LOOK_UP look_up , String code,String label){ this.look_up=look_up; this.code=code; this.label=label; } } } 持有的值,请按上述方式间接引用它。

地址OP代码

的答案的先前内容

你好像已经倒了你的枚举。第一个必须是包含枚举。要按照你所说的方式做到这一点,你需要做这样的事情:

LAST_FINISHED_MSPOT_TRADING_DATE

然后你可以调用,比方说,     LOOK_UP.BACKOFFICE_DEAFULT_RAPOR_DATE.LOOK_UP_OPTION; 并且您获得LOOK_UP_OPTION值。

LOOK_UP的{​​{1}}属性必须是最终的,以防止代码更改它。