簡體   English   中英

JAVA Sub Enum聲明

[英]JAVA Sub Enum declaration

我想從另一個枚舉聲明中訪問一個枚舉值,如下所示。 但是我無法實現聲明它,在Java中有沒有辦法做到這一點。

LOOK_UP.BACKOFFICE_DEAFULT_RAPOR_DATE.LAST_FINISHED_MSPOT_TRADING_DATE

更改

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)

解決OP的注釋以忽略代碼的新材料

如果您有兩個enums OuterEnumInnerEnum ,並且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

您可以通過在OuterEnum聲明InnerEnum來使其成為真正的內部enum ,但是同樣的原理也適用。 如果知道所需的精確值,則直接引用它。 如果您想知道另一個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_OPTION的屬性LOOK_UP需要是最終版本,防止代碼改變它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM