最终的公共静态整数不能在switch语句中使用吗?

3
我有点困惑。以下代码存在错误("..."代表省略的代码):
int byteOrder = ...;
switch (byteOrder)
{
    case HDF5Constants.H5T_ORDER_BE:
        return ByteOrder.BIG_ENDIAN;
    ...
}

错误出现在case语句中,Eclipse提示“case表达式必须是常量表达式”。我查看了源文件,发现有一长串像这样的行:
final public static int H5T_ORDER_BE = H5.J2C( JH5T_ORDER_BE );

我以为你可以在switch语句中使用final public static int常量作为case。我错了吗?
2个回答

10

从你展示的代码来看,H5T_ORDER_BE不是一个编译时常量(但它需要是),在类初始化期间会在运行时进行评估。如果它能被评估为某个常量,比如123(而不是像现在这样看起来是一个静态方法调用),那么编译器就不会报错。


7

你错了!:-)

Case语句只能引用常量。静态变量在运行时初始化,因此不能在此处使用。


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