int public static finali non possono essere utilizzati in un'istruzione switch?
-
18-09-2019 - |
Domanda
Sono confuso. Il seguente codice contiene errori ( "..." rappresenta il codice elisa):
int byteOrder = ...;
switch (byteOrder)
{
case HDF5Constants.H5T_ORDER_BE:
return ByteOrder.BIG_ENDIAN;
...
}
L'errore è sulla dichiarazione caso ed Eclipse si lamenta "espressioni case devono essere espressioni costanti". Ho guardato nel file sorgente per questo e ha una lunga lista di linee come questa:
final public static int H5T_ORDER_BE = H5.J2C( JH5T_ORDER_BE );
Ho pensato che si potrebbe usare le costanti final public static int
come casi di un'istruzione switch. Mi sbaglio ???
Soluzione
Da quello che hai mostrato H5T_ORDER_BE
non è una costante della fase di compilazione (che ha bisogno di essere) - è valutato in fase di esecuzione durante l'inizializzazione della classe. Se valutato come un costante come 123
(piuttosto che quello che sembra essere una chiamata di metodo statico), allora il compilatore non si lamenterebbe.
Altri suggerimenti
sono sbagliato! :-)
dichiarazioni di caso possono fare riferimento solo alle costanti. Una variabile statica viene inizializzata in fase di esecuzione, pertanto non può essere utilizzato qui.