Dlaczego nie można w pełni zakwalifikować wartości wyliczeniowej w instrukcji switch?

(uwaga: edytowane pytanie; wcześniejsza intencja nie była jasna)

Rozważ ten kod:

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);
        }
    }
}

Ten kod działa poprawnie.

Jeśli jednak zastąpię:

case VALUE1: // or VALUE2

z:

case X.VALUE1: // or X.VALUE2

wtedy kompilator skarży się:

java: /path/to/Foo.java:whatever: enum etykieta przypadku przełącznika musi być niekwalifikowaną nazwą stałej wyliczenia

WIĘCsugeruje odpowiedź z tym cytatem z JLS:

(Jednym z powodów wymagających wstawiania stałych jest to, że instrukcje przełączania wymagają stałych w każdym przypadku i żadne dwie takie stałe wartości nie mogą być takie same. Kompilator sprawdza duplikaty stałych wartości w instrukcji switch w czasie kompilacji; format pliku klasy nie jest zrobić symboliczne powiązanie wartości przypadku.)

Ale to mnie nie satysfakcjonuje. O ile mi wiadomo,VALUE1 iX.VALUE1 są dokładnie takie same. Cytowany tekst w ogóle mnie nie wyjaśnia.

Gdzie w JLS jest to zdefiniowaneenum wartości wswitch oświadczenia muszą być napisane w ten sposób?

questionAnswers(1)

yourAnswerToTheQuestion