Por que um valor de enum não pode ser totalmente qualificado em uma instrução switch?
(nota: pergunta editada; a intenção anterior não estava clara)
Considere este código:
public final class Foo
{
private enum X
{
VALUE1, VALUE2
}
public static void main(final String... args)
{
final X x = X.VALUE1;
switch (x) {
case VALUE1:
System.out.println(1);
break;
case VALUE2:
System.out.println(2);
}
}
}
Este código funciona bem.
No entanto, se eu substituir:
case VALUE1: // or VALUE2
com:
case X.VALUE1: // or X.VALUE2
então o compilador reclama:
java: /path/to/Foo.java:whatever: um rótulo de caso de comutador enum deve ser o nome não qualificado de uma constante de enumeração
ASSIMsugere uma resposta com esta citação do JLS:
(Uma razão para exigir inlining de constantes é que as instruções switch exigem constantes em cada caso, e não há dois valores constantes iguais podem ser o mesmo. O compilador verifica os valores constantes duplicados em uma instrução switch em tempo de compilação; fazer ligação simbólica de valores de caso.)
Mas isso não me satisfaz. Tanto quanto eu estou preocupado,VALUE1
eX.VALUE1
são exatamente os mesmos. O texto citado não explica nada para mim.
Onde no JLS é definido queenum
valores emswitch
declarações devem ser escritas dessa maneira?