簡體   English   中英

Java switch 語句中需要的常量表達式

[英]Constant expression required in Java switch statement

我在 Java 中有這段代碼

 final String workFlowKey = getProcessDefinitionKey();
        
        switch (workFlowKey) {
            case WorkflowKey.DOG_WORKFLOW.getKey():
                return "A";
                break;
            default: return null;
        }

但我有這個編譯錯誤:需要常量表達式

該錯誤會准確地告訴您出了什么問題。

案例標簽必須是編譯時常量。 這個:

case WorkflowKey.DOG_WORKFLOW.getKey():

有一個方法調用,它在編譯時是未知的(根據確定什么是常量的規則)。

WorkflowKey 是枚舉類型嗎? 然后你應該只打開枚舉常量:

case DOG_WORKFLOW:

當然,您需要一種方法從“流程定義”而不是您正在獲取的字符串中獲取枚舉值。

想象一種情況,如果您可以將方法傳遞給 case 子句。 如果該方法可以根據某些內部因素返回不同的值怎么辦? 同樣符合字段,或者說變量。 它可以在應用程序運行時采用不同的值。

class A {
  String f(){
    if(something) return „string1”;
    else return „string2”
  }
  public static void main(String[] args) {
    A obj = new A();
    String someString = "string1";
    switch(someString){
      case obj.f(): {…} // obj.f can potentially return 2 different results. So as any method. 
      …
    }
  }
}   

與檢查 boolean 表達式值的if-else不同,在switch-case中,傳入的值與內部的 case 進行比較。 在編譯時 Java 編譯器創建跳轉數組以優化性能,因此對於大量備選方案, switch-case通常比if-else更有效。 解釋跳轉的好鏈接,但在匯編代碼中)。 因此,為了執行此操作,必須在編譯時確定switch-case中 case 的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM