我想从另一个枚举声明中访问一个枚举值,如下所示。但是我无法实现声明它,在Java中有没有办法做到这一点。

LOOK_UP.BACKOFFICE_DEAFULT_RAPOR_DATE.LAST_FINISHED_MSPOT_TRADING_DATE

最佳答案

解决OP的注释以忽略代码的新材料

如果您有两个enumsOuterEnumInnerEnum,并且OuterEnum的字段类型为InnerEnum,则可以执行您正在说的事情。大大简化...

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

您可以通过在InnerEnum中声明enum使其成为真正的内部OuterEnum,但是适用相同的原理。如果知道所需的精确值,则直接引用它。如果您想知道另一个enum保留的值,请如上所述间接引用它。

地址OP的答案的先前内容

您似乎已经倒转了枚举。第一个必须是包含的枚举。要按照您声明的方式进行操作,您需要执行以下操作:

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


然后,您可以调用例如
    LOOK_UP.BACKOFFICE_DEAFULT_RAPOR_DATE.LOOK_UP_OPTION;
您将获得LAST_FINISHED_MSPOT_TRADING_DATE值。

LOOK_UP_OPTIONLOOK_UP属性必须是最终属性,以防止代码对其进行更改。

关于java - JAVA Sub Enum声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35126780/

10-10 01:03