2009-07-20 53 views
3

我很困惑。下面的代碼有錯誤(「...」表示消隱碼):最終公共靜態int不能用在switch語句中?

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); 

我想你可以使用final public static int常量案件switch語句。我錯了嗎???

回答

10

從你已經顯示的H5T_ORDER_BE不是一個編譯時常量(它需要) - 它在類的初始化期間在運行時進行評估。如果它評估爲一個常量,例如123(而不是看起來像是靜態方法調用),那麼編譯器不會抱怨。

7

錯! :-)

Case語句只能引用常量。一個靜態變量在運行時被初始化,所以它不能在這裏使用。

相關問題