[英]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)
如果您有兩個enums
OuterEnum
和InnerEnum
,並且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.myInner
或OuterEnum.OUTER2.myInner
得到InnerEnum
由持有價值OuterEnum
。 但是您不能說類似OuterEnum.OUTER1.INNER1
。 那根本沒有任何意義。 如果您知道想要INNER1
,則應該只說InnerEnum.INNER1
。
您可以通過在OuterEnum
聲明InnerEnum
來使其成為真正的內部enum
,但是同樣的原理也適用。 如果知道所需的精確值,則直接引用它。 如果您想知道另一個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;
}
}
}
然后,您可以調用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.