![](/img/trans.png)
[英]Java switch statement: Constant expression required, but it IS constant
[英]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.