【问题标题】:Java called method return value as a switch case valueJava调用方法返回值作为switch case值
【发布时间】:2012-05-15 15:04:21
【问题描述】:
我必须使用一个值,通常通过 switch case 中的方法返回。
int getVal(){return 121;}
switch(expr){
case getVal():
}
但它给出的编译错误:需要常量表达式。
我也试过了,
int _val = getVal();
switch(expr){
case _val:
}
结果相同。
是否有任何解决方法来实现它。
谢谢,
阿米特
【问题讨论】:
标签:
java
switch-statement
case
method-call
【解决方案1】:
正如错误明确指出的那样,switch 仅适用于 constant 表达式。
您需要使用if。
【解决方案2】:
这是行不通的,因为当您认为您的方法实际上是一个常量时,它可能被隐藏,该类可能是子类,或者任何数量的其他项可能会干扰.
虽然编译器可以尝试识别返回值是一个常量,但它不会,因为它也没有完整的图片,因为 Java 项目中的类可以以不同的方式编译次(子类在其父类之后编译,等等)
此外,作为开关标签的功能的含义也没有明确确定。虽然您可能将其视为重命名常量的简写,但其他人可能希望在每次输入开关时对其进行评估,而其他人可能希望在每次输入标签时对其进行评估,而另一个人可能希望它每次开关跳转到该标签时都进行评估(这是不可能的,因为您必须在跳转到它之前评估这样的标签。)由于没有明确的共识,最好将其排除在外语言,直到达成明确的共识。
这甚至不能保证这种方法不会返回重复的标签(开关不支持具有相同值的多个标签)。