Java中调用的方法返回值作为switch case语句的值

4

我需要使用一个值,通常是通过 switch case 中的方法返回的。

int getVal(){return 121;}

 switch(expr){

    case getVal():
 }

但是它给出了编译错误:需要常量表达式。 我也尝试过像这样,
int _val = getVal();

 switch(expr){

    case _val:
 }

结果相同。

有没有实现它的任何解决方法。

谢谢,阿米特。

2个回答

6
正如错误明确指出的那样,switch仅适用于常量表达式。
你需要使用一个if

0
这样做是行不通的,因为虽然你认为你的方法将有效地成为一个常量,但它可能会被隐藏,类可能会被子类化,或者任何其他项目可能会干扰。
虽然编译器可以尝试确定返回值是一个常量,但它不会这样做,因为它也没有整个图片,Java项目中的类可以在不同的时间编译(子类在其父类之后编译等)。
此外,函数作为开关标签的含义并不清楚。虽然您可能认为它是重命名常量的简写,但其他人可能希望每次进入开关时都对其进行评估,而另一个人可能希望每次进入标签时都对其进行评估,而另一个人可能希望每次开关跳转到该标签时都对其进行评估(这是不可能的,因为必须在跳转到该标签之前评估这样的标签)。由于没有明确的共识,最好在没有明确共识之前将其从语言中删除。
这甚至没有涉及确保这样的方法不返回重复标签(开关不支持相同值的多个标签)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接