4

我必须使用一个值,通常通过 switch case 中的方法返回。

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 回答