[英]Enum value not comparing to enum in switch
我在Constants類中有一個帶有一些名稱的Enum:
static final enum NAMES {
One,
Two,
Three,
Four,
Five
}
我試圖通過以下方法進行研究:
for (Constants.NAMES name in Constants.NAMES.values())
然后在開關中使用它們:
switch (index.key) {
case Constants.NAMES.One:
我還嘗試過僅使用One作為案例,使用Enumset作為循環,唯一可行的方法是使用“ One”作為字符串,但這違背了Enum的目的。
這正在工作:
for (Constants.NAMES script : Constants.NAMES.values()) {
switch (index.key) {
case Constants.NAMES.ONE.name():
如下定義您的枚舉:
enum NAMES {
ONE, TWO, THREE, FOUR, FIVE
}
當與聲明枚舉一起使用時, static final
是非法修飾符。 還要確保常量僅使用大寫字母定義。
然后使用:
public static void main(String[] args) {
String myStr = "something";
switch (NAMES.valueOf(myStr)) {
case ONE:
break;
case TWO:
break;
// the rest
default:
break;
}
}
或者,您可以創建一個靜態方法來從enum
獲取結果
enum NAMES {
ONE, TWO, THREE, FOUR, FIVE;
public static NAMES fetchValue(String constant) {
NAMES name = null;
for (NAMES num : EnumSet.allOf(NAMES.class)) {
if (num.name().equals(constant)) {
name = NAMES.valueOf(constant);
}
}
return name;
}
}
並使用以下命令調用它:
NAMES names = NAMES.fetchValue("ONE");
用這種方法,即使找不到常量,代碼也不會中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.