我很困惑。以下代码有错误(“...”代表省略代码):
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
常量作为案例。我错了???
答案 0 :(得分:10)
从你所展示的H5T_ORDER_BE
开始,它不是一个编译时常量(它需要它) - 它在类的初始化过程中在运行时进行评估。如果它被评估为常量,例如123
(而不是看似静态的方法调用),那么编译器就不会抱怨。
答案 1 :(得分:7)
你 错了! :-)
Case语句只能引用常量。静态变量在运行时初始化,因此不能在此处使用。