Originariamente inviato da Poker1
ma la variabile che mi sono definito non è costante?
Una cosa è una costante (nel senso che non cambia) e un'altra (molto più stringente) è una costante "a tempo di compilazione".

Ed è costante a tempo di compilazione se il compilatore "sa" già (o può calcolare) in modo inequivocabile il valore.

codice:
public static final int a = 1234;   // costante a tempo di compilazione

public static final int a = unMetodo();  // costante NON a tempo di compilazione
Nel secondo caso è ovvio che il compilatore NON può sapere il valore.

E per i case dello switch il compilatore deve sapere i valori a priori!