with unqualified the switch name must enum constant java enums switch-statement

java - with - an enum switch case label must be the unqualified name of an enumeration constant



Java: usando la instrucción switch con enum bajo la subclase (5)

Así es como lo estoy usando. Y está funcionando fantásticamente.

public enum Button { REPORT_ISSUES(0), CANCEL_ORDER(1), RETURN_ORDER(2); private int value; Button(int value) { this.value = value; } public int getValue() { return value; } }

Y el switch-case como se muestra a continuación

@Override public void onClick(MyOrderDetailDelgate.Button button, int position) { switch (button) { case REPORT_ISSUES: { break; } case CANCEL_ORDER: { break; } case RETURN_ORDER: { break; } } }

Primero diré que estoy mucho más familiarizado con las enumeraciones en C # y parece que las enumeraciones en Java es un desastre.

Como puede ver, estoy intentando usar una instrucción de cambio @ enums en mi siguiente ejemplo, pero siempre obtengo un error sin importar lo que esté haciendo.

El error que recibo es:

La etiqueta de caso calificada SomeClass.AnotherClass.MyEnum.VALUE_A debe reemplazarse con la constante de enumeración no calificada VALUE_A

El problema es que entiendo muy bien el error, pero no puedo escribir el VALUE_A ya que la enumeración se encuentra en otra subclase. ¿Hay alguna manera de resolver este problema? ¿Y por qué está sucediendo en Java?

//Main Class public class SomeClass { //Sub-Class public static class AnotherClass { public enum MyEnum { VALUE_A, VALUE_B } public MyEnum myEnum; } public void someMethod() { MyEnum enumExample //... switch (enumExample) { case AnotherClass.MyEnum.VALUE_A: { <-- error on this line //.. break; } } } }


Cambia esto a esto:

switch (enumExample) { case VALUE_A: { //.. break; } }

La pista está en el error. No es necesario que califique las etiquetas de case con el tipo de enumeración, solo su valor.


Escribe someMethod() de esta manera:

public void someMethod() { SomeClass.AnotherClass.MyEnum enumExample = SomeClass.AnotherClass.MyEnum.VALUE_A; switch (enumExample) { case VALUE_A: break; } }

En la instrucción switch, debe usar solo el nombre constante.


Java deduce automáticamente el tipo de los elementos en el case , por lo que las etiquetas no deben estar calificadas.

int i; switch(i) { case 5: // <- integer is expected } MyEnum e; switch (e) { case VALUE_A: // <- an element of the enumeration is expected }


esto debería hacer:

//Main Class public class SomeClass { //Sub-Class public static class AnotherClass { public enum MyEnum { VALUE_A, VALUE_B } public MyEnum myEnum; } public void someMethod() { AnotherClass.MyEnum enumExample = AnotherClass.MyEnum.VALUE_A; //... switch (enumExample) { case VALUE_A: { //<-- error on this line //.. break; } } } }