在代碼中需要使用分支判斷,嫌if else語句不夠簡潔,故使用switch case語句:
switch (cmd){
case Globals.PileCmd.REG: {
SocketUtil.dealRegCMD(ctx, stm, chargePileService);
break;
}
case Globals.PileCmd.TIME_SYNCHRONIZE_RESPONSE: {
SocketUtil.dealTimeSynchronizeCMD(ctx, stm);
break;
}
default: break;
}
結果代碼中出現如下錯誤:case expressions must be constant expressions。翻譯過來就是case表達式必須是靜態變量
在Globals.PileCmd.REG上,我在這個類裏面代碼是這樣的:
public static final class PileCmd {
public final static Integer REG = 106;
public final static Integer REG_RESPONSE = 105;
... ...
}
我寫的明明是靜態變量,還加了final,怎麼回事?
接下來是各種百度.....
經查發現問題:switch case 語句僅支持基本數據類型,也就是說我寫的Integer是不行的,必須使用int:
public static final class PileCmd {
public final static int REG = 106;
public final static int REG_RESPONSE = 105;
... ...
}
修改過來之後,問題解決。
另外,列舉一下switch case支持的類型:int、short、char、byte和enum類型(JDK 1.7 之後,類型也可以是String)。
參考鏈接:https://zhidao.baidu.com/question/988599501669345419.html