Warum kann ein Enum-Wert in einer switch-Anweisung nicht vollständig qualifiziert werden?
(Anmerkung: bearbeitete Frage; die vorherige Absicht war nicht klar)
Betrachten Sie diesen Code:
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);
}
}
}
Dieser Code funktioniert gut.
Wenn ich jedoch ersetze:
case VALUE1: // or VALUE2
mit:
case X.VALUE1: // or X.VALUE2
dann beschwert sich der Compiler:
java: /path/to/Foo.java:whatever: Ein Enum-Switch-Case-Label muss der unqualifizierte Name einer Enumeration-Konstante sein
SOschlägt eine Antwort vor mit diesem Zitat aus dem JLS:
(Ein Grund für das Inlining von Konstanten besteht darin, dass switch-Anweisungen jeweils Konstanten erfordern und keine zwei dieser Konstantenwerte identisch sein dürfen. Der Compiler prüft beim Kompilieren, ob in einer switch-Anweisung doppelte Konstantenwerte vorhanden sind, das Klassendateiformat jedoch nicht machen symbolische Verknüpfung von Fallwerten.)
Das befriedigt mich aber nicht. Soweit es mich betrifft,VALUE1
undX.VALUE1
sind genau das gleiche. Der zitierte Text erklärt es mir überhaupt nicht.
Wo in der JLS ist das definiertenum
Werte inswitch
Aussagen müssen so geschrieben werden?