对于静态final int,case表达式必须是常量表达式。

user1131435:

我有一个final class Ring定义为:

final class Ring {
    public static final int OUT = 3;
    public static final int MID = 2;
    public static final int IN  = 1;
}

我也有public class MorrisBoard以下代码:

public class MorrisBoard {
    public static final Ring RING = new Ring();

    private boolean checkMillBy(int ring, int x, int y) {
    switch(ring) {
    case MorrisBoard.RING.OUT:
        //...
    case MorrisBoard.RING.MID: //etc.
        //...   
    }
    return false;
}

MorrisBoard.RING.OUT引用一个在程序生命周期内不变的变量。所有值均为最终值。

但是,我仍然收到以下错误:case expressions must be constant expressions我对此感到困惑- MorrisBoard.RING.OUT是一个常量表达式。

这里发生了什么?

DenysSéguret:

更换

 case MorrisBoard.RING.OUT:

 case Ring.OUT:

因此,这实际上将是“在编译时确定”中的常量。

该规范要求 “ SwitchLabel”必须是

  • case 后跟一个常量表达式
  • case 后跟一个枚举值的名称
  • 要么 default

规范中在此描述了有效的常量表达式相当有限。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从lambda表达式引用的局部变量必须是final或有效的final

切换枚举的值:case表达式必须是常量表达式

Switch Java问题:case表达式必须是常量表达式

切换case语句错误:case表达式必须为常量表达式

内部类允许静态字段和非常量静态表达式-为什么?

在常量表达式中调用的“静态constexpr”函数是...错误?

用于double类型的静态类成员的常量表达式初始化程序

需要澄清常量表达式

(int &&)5是整数常量表达式吗?

“函数调用必须在常量表达式中具有常量值”

静态常量表达式VS 2015内部编译器错误const char * a [] = {“ foo”,“ bar”}

常量表达式中的静态成员访问

C ++:“(静态const双变量)不能出现在常量表达式中”

无法匹配的正则表达式(对于生成的表达式)

如何从常量设置case语句的分支?错误:选择必须是本地静态表达式

dart常量创建的参数必须是常量表达式

地址常量表达式

大小写表达式必须是常量表达式

表达式不是整数常量表达式

静态断言C ++-常量表达式错误

Java switch:case表达式必须是常量表达式

需要常量表达式

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

glvalue整型常量表达式是常量表达式吗?

“预期常量表达式”错误

Android“需要常量表达式”

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

对于作为表达式

对于表达式a+=b|=c,这个表达式将如何运行?