【问题标题】: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 项目中的类可以以不同的方式编译次(子类在其父类之后编译,等等)

      此外,作为开关标签的功能的含义也没有明确确定。虽然您可能将其视为重命名常量的简写,但其他人可能希望在每次输入开关时对其进行评估,而其他人可能希望在每次输入标签时对其进行评估,而另一个人可能希望它每次开关跳转到该标签时都进行评估(这是不可能的,因为您必须在跳转到它之前评估这样的标签。)由于没有明确的共识,最好将其排除在外语言,直到达成明确的共识。

      这甚至不能保证这种方法不会返回重复的标签(开关不支持具有相同值的多个标签)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-29
        • 2022-06-16
        • 2021-05-10
        • 2012-12-18
        • 2013-08-21
        相关资源
        最近更新 更多