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

Jas*_*n S 3 java case switch-statement

我糊涂了.以下代码有错误("..."代表省略代码):

int byteOrder = ...;
switch (byteOrder)
{
    case HDF5Constants.H5T_ORDER_BE:
        return ByteOrder.BIG_ENDIAN;
    ...
}
Run Code Online (Sandbox Code Playgroud)

错误在case语句上,Eclipse抱怨"case表达式必须是常量表达式".我在源文件中查找了这个,它有很长的列表,如下所示:

final public static int H5T_ORDER_BE = H5.J2C( JH5T_ORDER_BE );
Run Code Online (Sandbox Code Playgroud)

我以为你可以final public static int在switch语句中使用常量作为例子.我错了吗???

Vin*_*jip 10

从你所展示H5T_ORDER_BE的不是编译时常量(它需要它) - 它在类的初始化期间在运行时进行评估.如果它被评估为常量,例如123(而不是看起来像是静态方法调用)那么编译器就不会抱怨.


Ben*_*n M 7

错的!:-)

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