[解決済み] なぜswitch文ではenum値を完全修飾できないのですか?
質問
(注:質問を編集したもので、事前の意図が明確ではありませんでした)
このコードを考えてみましょう。
public final class Foo
{
private enum X
{
VALUE1, VALUE2
}
public static void main(final String... args)
{
final X x = X.VALUE1;
switch (x) {
case VALUE1:
System.out.println(1);
break;
case VALUE2:
System.out.println(2);
}
}
}
このコードは正常に動作します。
ところが、置き換えてみると
case VALUE1: // or VALUE2
を使っています。
case X.VALUE1: // or X.VALUE2
とすると、コンパイラは文句を言います。
java: /path/to/Foo.java:whatever: enum switch case label must be an unqualified name of an enumeration constant(enumスイッチケースのラベルは列挙定数の非限定名でなければなりません。
SO 回答はこちら をJLSから引用しています。
<ブロッククオート(定数のインライン化が必要な理由の1つは、switch文では各ケースで定数が必要であり、その定数値が2つと同じでない可能性があるためです)。コンパイラはコンパイル時にswitch文の定数値が重複していないかチェックしますが、クラスファイル形式ではケース値のシンボリックリンクは行いません)。
しかし、これでは納得がいきません。私が知る限りでは
VALUE1
と
X.VALUE1
は全く同じです。引用された文章では私には全く説明がつきません。
JLSのどこで、次のように定義されているのでしょうか?
enum
の値は
switch
文はこのように書かなければならないのですか?
どのように解決するのですか?
SwitchLabel
が期待するのは
EnumConstantName
は、enum定数識別子として定義されています。
であり、非限定である
:
EnumConstantです。
アノテーション <サブ オプト 識別子の引数 <サブ opt クラス本体 <サブ opt
関連
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】Java:サブクラス下のenumでswitchステートメントを使用する
-
[解決済み] error: enum switch case label must be an unqualified name of an enumeration constant
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] Stringでswitch文が使えないのはなぜですか?
-
[解決済み] Enum 値から文字列名
-
[解決済み】なぜenumクラスはプレーンなenumより好ましいのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み】javaで無効な文字定数
-
[解決済み] "java.nio.charset.MalformedInputException" を避けるために、すべての包括的なCharset。入力の長さ= 1"?