使用switch case 語句報錯:case expressions must be constant expressions

在代碼中需要使用分支判斷,嫌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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章