Java Switch 語句常數表達式混亂
在 Java 中,switch 語句需要常數表達式作為 case 標籤。然而,即使使用看似常數的變量,開發人員也經常會遇到抱怨非常量表達式的錯誤。
考慮以下範例:
public abstract class Foo { public static final int BAR; public static final int BAZ; public static final int BAM; public static String lookup(int constant) { switch (constant) { case Foo.BAR: return "bar"; case Foo.BAZ: return "baz"; case Foo.BAM: return "bam"; default: return "unknown"; } } }
編譯此程式碼時,您可能會遇到「常數」每個案例標籤上都出現「需要表達式」錯誤。
為什麼不是 Foo.BAR 變數常數?
雖然 Foo.BAR 變數從執行角度來看實際上是常數,但它們不是 Java 語言規範 (JLS) 所要求的「編譯時常數」。 JLS 第15.28 節將常數表達式定義為:
在上面的範例中,Foo.BAR 變數沒有使用明確初始化器聲明,因此它們不符合編譯時常量的條件。
解:
要解決這個錯誤,請使用編譯時常數初始化 Foo.BAR 變數表達方式:
public static final int BAR = 1; public static final int BAZ = 2; public static final int BAM = 3;
以上是為什麼 Java 的 Switch 語句不接受看似常數的變數作為 case 標籤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!