2011-01-31 10 views
5

スイッチのケースでは、パラメータを大文字小文字定数として使用しようとすると、コンパイルエラーが発生することがわかりました。しかし、フィールド/ローカル変数を使うことができます。Javaでは、switch文、case定数としてメソッド/コンストラクタのパラメータを使用できますか?

大文字小文字の定数としてパラメータを使用することは本当に不可能ですか?あるいは例外があります(もしそうなら、例を挙げてください)?

例:

final int field = 0; 
void method(final int parameter) { 
    switch(3) { 
     case field: // ALLOWED 
     case parameter; // NOT ALLOWED 
    } 
} 

私が直接パラメータを使用しようとしています。私は、ローカルvarにパラメータの値を保存するソリューションには興味がありません。

答えて

3

に定数のみを使用することができ、Javaは唯一caseの値としてコンパイル時定数を使用することができます。

の値が初期化finalコンパイル時にクラスメンバーを決定でき、変更できません。 finalメソッドパラメータは、各メソッド呼び出しで異なる値を持つことができます。

メソッドのパラメータと比較するには、おそらく古くなったif...else...にフォールバックする必要があります。

EDIT:ところで

に重点を注意しては、上記を初期化。宣言時に初期化子を持たないfinalクラスメンバは、caseの値としても使用できません。

2

Javaは、多くのCおよびC++のようなcase一部

関連する問題