2009-07-20 5 views
3

나는 혼란 스럽다. 다음 코드는 오류가 있습니다 ("..."생략 된 코드를 나타냅니다) :final public static ints는 switch 명령문에서 사용할 수 없습니까?

int byteOrder = ...; 
switch (byteOrder) 
{ 
    case HDF5Constants.H5T_ORDER_BE: 
     return ByteOrder.BIG_ENDIAN; 
    ... 
} 

오류는 case 문에 이클립스는 "경우에 식은 상수 식이어야합니다"를 뿌려줍니다. 나는이에 대한 소스 파일에서 보았다는 같은 라인의 긴 목록이있다 : 당신이 switch 문에서의 경우와 같은 final public static int 상수를 사용할 수 있다고 생각

final public static int H5T_ORDER_BE = H5.J2C(JH5T_ORDER_BE); 

합니다. 내가 잘못???

답변

10

표시된 것에서 H5T_ORDER_BE은 컴파일 타임 상수가 아니며 (런타임시 필요합니다) 클래스의 초기화 중에 런타임에 평가됩니다. 정적 메서드 호출 인 것처럼 보이기보다는 123과 같은 상수로 평가되면 컴파일러는 불평하지 않습니다.

7

입니다. :-)

사례 명세서는 상수만을 참조 할 수 있습니다. 정적 변수는 런타임에 초기화되므로 여기서는 사용할 수 없습니다.

관련 문제