Esiste un modo per convertire un enum in un'espressione costante? Voglio che il mio operatore di interruttore per scegliere tra i valori di un enum, ma ho avuto un errore di compilazione "espressioni case devono essere espressioni costanti", così ho provato a dichiarare in una variabile:Espressioni costanti da un Enum
final int REG = MyEnum.REG.getIndex().intValue();
switch (service.getIndex()) {
case REG:
Ma ancora ottieni lo stesso errore Secondo la documentazione di Oracle http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28
Una fase di compilazione espressione costante è un'espressione che denota un valore di tipo primitivo o una stringa che non completano bruscamente ed è composta utilizzando solo il seguente:
• letterali di tipo primitivo e letterali di tipo Stringa
Quindi non funziona perché non sto utilizzando un letterale. Penso che dovrò dichiararlo come:
final int REG = 8;
Ma sarebbe molto meglio collegarlo all'enum. C'è un modo per farlo?
EDIT
Risulta Non ho bisogno di usare qualsiasi variabile finale. È semplice come:
switch (service) {
case REG:
Non mi è venuto in mente finché non ho visto il commento di Andrea. Grazie per le tue risposte.
Suppongo che 'service.getIndex()' restituisce 'Integer ', giusto? Puoi modificarlo in modo che restituisca il tuo enum? –
Fino a Java 1.6 non è possibile utilizzare 'String' in' switch-case', ma è possibile utilizzarlo in Java 7. FYI – Joshi