4

値を使用する必要があります。通常は、switch ケースのメソッドを介して戻ります。

int getVal(){return 121;}

 switch(expr){

    case getVal():
 }

しかし、コンパイルエラーが発生しました:定数式が必要です。

私も試してみました、

int _val = getVal();

 switch(expr){

    case _val:
 }

同じ結果が得られます。

それを実装するための回避策はありますか。

ありがとう、アミット

4

2 に答える 2

6

エラーが明確に述べているように、定数式でswitchのみ機能します。

を使用する必要がありますif

于 2012-05-15T15:06:05.803 に答える
0

これは機能しません。メソッドは事実上定数であると考えていますが、非表示にしたり、クラスをサブクラス化したり、その他の項目がいくつでも干渉したりする可能性があるためです。

コンパイラは戻り値が定数であることを認識しようとする可能性がありますが、Javaプロジェクトのクラスはさまざまな時点でコンパイルできるため(親の後にコンパイルされるサブクラスなど)、全体像がわからないため、そうではありません。 )。

また、スイッチラベルとしての機能が何を意味するのかは明確に確立されていません。定数の名前を変更するための省略形と見なすかもしれませんが、スイッチが入力されるたびに評価されることを期待する人もいれば、ラベルが入力されるたびに評価されることを期待する人もいれば、ラベルが入力されるたびに評価されることを期待する人もいます。スイッチがそのラベルにジャンプするたびに評価されます(ジャンプするにそのようなラベルを評価する必要があるため不可能です)。明確なコンセンサスがないため、明確になるまで言語から除外することをお勧めします。コンセンサス。

そして、それはそのようなメソッドが重複したラベルを返さないという保証にさえ入りません(スイッチは同じ値の複数のラベルをサポートしません)。

于 2012-05-15T15:12:40.107 に答える