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 変数ではないのはなぜですかconstant?
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 ステートメントは、一見定数に見える変数をケース ラベルとして受け入れないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。