ホームページ > Java > &#&チュートリアル > Java の switch ステートメントは、一見定数に見える変数をケース ラベルとして受け入れないのはなぜですか?

Java の switch ステートメントは、一見定数に見える変数をケース ラベルとして受け入れないのはなぜですか?

Linda Hamilton
リリース: 2024-12-10 15:44:10
オリジナル
834 人が閲覧しました

Why Doesn't Java's Switch Statement Accept Seemingly Constant Variables as Case Labels?

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 では、定数式を次のようなものとして定義しています。

  • プリミティブ型または String を参照
  • リテラル、定数変数、括弧のみを使用する
  • を除く代入演算子、 、 -- 、およびinstanceof
  • は含まれませんプリミティブ型または String を除く型キャスト

上記の例では、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート