Java では、switch ステートメントには case ラベルの定数式が必要です。 Foo.BAR のような定数は定数のように見えますが、Java 言語仕様 (JLS) で定義されているコンパイル時定数とはみなされません。 JLS §15.28 によれば、定数式はコンパイル時に既知である必要があります。
Foo.BA_ がコンパイル時の定数ではない理由:
にもかかわらず Foo.BA_変数はフィールドの初期化後は事実上定数ですが、コンパイル時の定数初期化子がありません。コンパイル時定数を作成するには、定数式を使用して変数を明示的に初期化します。例:
public static final int BAR = 1; public static final int BAZ = 2; public static final int BAM = 3;
Switch ステートメントの代替:
int 定数の代わりに enum の使用を検討してください。ただし、enum には、switch ステートメントがすべての enum 値をカバーする場合でもデフォルトのケースが必要になるなど、追加の制約が課されます。さらに、case ラベルは、列挙値に評価される式ではなく、明示的な列挙値である必要があります。
Switch ステートメントの定数式に関する制限:
switch ステートメントで使用される定数式には、特定の制限:
要約すると、switch を使用する場合Java のステートメントでは、case ラベルの式がコンパイル時の定数であることを確認してください。代替手段として列挙型を検討してください。ただし、列挙型固有の制限事項に注意してください。これらの要件を理解すると、コードの信頼性と明確さが向上します。
以上がJava の「switch」ステートメントではコンパイル時以外の定数を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。