:ここ
は、既存のコードを見直し、以下の簡単なスニペットです。
これは誤った理解です。最終的な変数は、作成されている配列の新しいインスタンスのみを防ぎますが、変更されている配列の内容を妨げません。私はあなたの既存のコードでこれを行うことができますし、それが有効になります。
final String[] match = {"a", "b", "c"};
match[0] = "b"; // CHANGE HERE
switch (switchVar) {
case "a": //Fixing this to make it compile
/* Eclipse complains here about nonconstant switch */
System.out.println("Matches");
break;
default:
System.out.println("No Match");
break;
}
コードのコンパイルを行うためにと、switchステートメントを使用するには、定数を使用する必要があります。したがって、定数を宣言するか、または定位置の文字列を宣言すると、動作するようになります。 The Java Language Specification on switch statementsはすべてのステートメントを切り替える仮定が定数式で動作しますので、
final String[] match = {"a", "b", "c"};
switch (switchVar) {
case "a": // CHANGE HERE
/* Eclipse complains here about nonconstant switch */
System.out.println("Matches");
break;
default:
System.out.println("No Match");
break;
}
これがある理由は単純です。
あなたの見積もりは「このポイントを補強しません」。文法は次のようになります: 'SwitchLabel: case ConstantExpression: case EnumConstantName: デフォルト:'。あなたの引用は、スイッチ表現自体の中にあるものについて、 'switch'部分にあります。 – EJP
@EJP:それは少し混乱して読むことができます。同意する。私はそれに言い返した。 – Makoto
「紛らわしい」?それは無関係だった。 – EJP