окончательные публичные статические целые не могут быть использованы в операторе switch? - PullRequest
3 голосов
/ 20 июля 2009

Я в замешательстве. Следующий код содержит ошибки («...» представляет исключенный код):

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. Я не прав ???

Ответы [ 2 ]

10 голосов
/ 20 июля 2009

Из того, что вы показали, H5T_ORDER_BE не является константой времени компиляции (какой она должна быть) - она ​​оценивается во время выполнения во время инициализации класса. Если он оценивается как константа, такая как 123 (а не как вызов статического метода), компилятор не будет жаловаться.

7 голосов
/ 20 июля 2009

Вы не правы! :-)

Операторы case могут ссылаться только на константы. Статическая переменная инициализируется во время выполнения, поэтому ее нельзя использовать здесь.

...