在上一篇文章中,我用自己寫的枚舉類來作Case判斷的時候發現了問題。系統一直提示Constant expression required,這是爲什麼呢?
原因是這樣的:switch…case語句的case後面的值必須爲常量,因爲switch在編譯的時候需要確保case裏面的值必須不能相同。直接寫getXXX這樣的方法是可能出現重複的,因爲你可以寫兩個相同的枚舉值,但是實際業務場景下,一般也不會有人這樣子做。即使如此,編譯器還是不認。那怎麼辦呢,我們加一個方法提前判斷就行了。
枚舉類
public enum NumberForCaseEnum {
ONE(1),
TWO(2),
THREE(3),
FOUR(4);
private int index;
private NumberForCaseEnum(int index){
this.index=index;
}
public int getIndex(){
return this.index;
}
/**
* 提前判斷,用於解決
* Case中出現的Constant expression required
* @param value
* @return
*/
public static NumberForCaseEnum getByValue(int value){
for(NumberForCaseEnum x:values()){
if(x.getIndex()==value){
return x;
}
}
return null;
}
}
測試代碼:
//可以通過循環遍歷拿值
for(NumberForCaseEnum x:NumberForCaseEnum.values()){
System.out.println("枚舉值:"+x.getIndex());
}
//也可以單獨拿值
System.out.println("調皮搗蛋的:"+ONE.getIndex());
//
switch(NumberForCaseEnum.getByValue(2)){
case ONE:
System.out.println("1111");
break;
case TWO:
System.out.println("精明可愛的:2222");
break;
case THREE:
System.out.println("3333");
break;
default:
}
運行結果:
關注公衆號,獲取更多資源
每天進步一點點,開心也多一點點