Java switch ステートメントを使用する場合、case ラベルで使用される式が確実に使用されるようにすることが重要ですは定数式です。定数式は、コンパイル時に評価され、定数値を生成する式です。これが必要なのは、コンパイラがどのケースを実行するかを決定するために式の正確な値を知る必要があるためです。
次の例には、3 つの静的定数を持つクラスがあります:
次に、switch ステートメントを使用して定数に基づいて関連する文字列を取得するメソッドがあります。
ただし、これをコンパイルしようとすると、コードを実行すると、3 つのケース ラベルのそれぞれで定数式が必要なエラーが発生します。これは、フィールドが初期化された後に実行されるコードの観点からは定数は定数ですが、Java 言語仕様 (JLS) で要求される意味でのコンパイル時の定数ではないためです。
具体的には、JLS では、定数式をコンパイル時に評価して定数値を生成できる式として定義します。これは、式には、それ自体が定数ではない変数や、それ自体が定数ではない操作を含めることができないことを意味します。
この例では、Foo.BA* 定数はコンパイル時定数ではありません。イニシャライザ。これを修正するには、コンパイル時の定数式を使用して定数を初期化するだけです。
これで、コードをコンパイルすると、正常にコンパイルされるはずです。
次の点にも注意してください。 switch ステートメントでは int 定数の代わりに enum を使用できること。ただし、列挙型には、int 定数にはない制限がいくつかあります。たとえば、列挙型のすべての既知の値に対して大文字と小文字が区別されている場合でも、列挙型にはデフォルトの大文字と小文字が必要です。また、case ラベルはすべて、enum 値として評価される式ではなく、明示的な enum 値である必要があります。
以上が静的定数を使用すると、Java Switch ステートメントで「定数式が必要です」エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。