我必须使用一个值,通常通过 switch case 中的方法返回。
int getVal(){return 121;}
switch(expr){
case getVal():
}
但它给出的编译错误:需要常量表达式。
我也试过了,
int _val = getVal();
switch(expr){
case _val:
}
有同样的结果。
是否有任何解决方法来实现它。
谢谢,阿米特
我必须使用一个值,通常通过 switch case 中的方法返回。
int getVal(){return 121;}
switch(expr){
case getVal():
}
但它给出的编译错误:需要常量表达式。
我也试过了,
int _val = getVal();
switch(expr){
case _val:
}
有同样的结果。
是否有任何解决方法来实现它。
谢谢,阿米特
正如错误明确指出的那样,switch
仅适用于常量表达式。
您需要使用if
.
这是行不通的,因为虽然您认为您的方法实际上是一个常量,但它可能是隐藏的,该类可能是子类,或者任何数量的其他项目可能会干扰。
虽然编译器可以尝试识别返回值是一个常量,但它不会,因为它也没有完整的画面,因为 Java 项目中的类可以在不同的时间编译(子类在它们的父类之后编译等) )
此外,还没有明确确定作为开关标签的功能是什么意思。虽然您可能将其视为重命名常量的简写,但其他人可能希望在每次输入开关时对其进行评估,而其他人可能希望在每次输入标签时对其进行评估,而另一个人可能希望它每次切换到该标签时都要进行评估(这是不可能的,因为您必须在跳转到它之前评估这样的标签。)由于没有明确的共识,最好将其排除在语言之外,直到有明确的共识。
这甚至不能保证这种方法不会返回重复的标签(开关不支持具有相同值的多个标签)。