O Final Public Static Ints não pode ser usado em uma declaração de troca?
-
18-09-2019 - |
Pergunta
Estou confuso. O código a seguir possui erros ("..." representa o código Elided):
int byteOrder = ...;
switch (byteOrder)
{
case HDF5Constants.H5T_ORDER_BE:
return ByteOrder.BIG_ENDIAN;
...
}
O erro está na instrução CASE e o Eclipse reclama "Expressões de casos devem ser expressões constantes". Eu olhei no arquivo de origem para isso e ele tem uma longa lista de linhas como esta:
final public static int H5T_ORDER_BE = H5.J2C( JH5T_ORDER_BE );
Eu pensei que você poderia usar final public static int
constantes como casos em uma declaração de interruptor. Estou errado???
Solução
Do que você mostrou H5T_ORDER_BE
não é uma constante de tempo de compilação (que precisa ser) - é avaliada em tempo de execução durante a inicialização da classe. Se avaliado para uma constante como 123
(em vez do que parece ser uma chamada estática de método), o compilador não reclamaria.
Outras dicas
Você são errado! :-)
As declarações de caso podem se referir apenas a constantes. Uma variável estática é inicializada em tempo de execução, para que não possa ser usada aqui.