最终的public static int不能在switch语句中使用?

时间:2009-07-20 19:21:13

标签: java switch-statement case

我很困惑。以下代码有错误(“...”代表省略代码):

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常量作为案例。我错了???

2 个答案:

答案 0 :(得分:10)

从你所展示的H5T_ORDER_BE开始,它不是一个编译时常量(它需要它) - 它在类的初始化过程中在运行时进行评估。如果它被评估为常量,例如123(而不是看似静态的方法调用),那么编译器就不会抱怨。

答案 1 :(得分:7)

错了! :-)

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