Primero declararé que estoy mucho más familiarizado con las enumeraciones en C # y parece que las enumeraciones en Java son un desastre.
Como puede ver, estoy tratando de usar una instrucción switch @ enums en mi próximo ejemplo, pero siempre recibo un error sin importar lo que esté haciendo.
El error que recibo es:
La etiqueta de caso calificada
SomeClass.AnotherClass.MyEnum.VALUE_Adebe ser reemplazada por la constante enum no calificadaVALUE_A
La cuestión es que entiendo bastante el error, pero no puedo escribir el VALOR_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;
}
}
}
}
java
enums
switch-statement
Popokoko
fuente
fuente

Enumes extremadamente útil una vez que los dominas, en absoluto un desastre. Son mucho más flexibles y prácticos que las enumeraciones simples (simplemente un valor entero etiquetado) como se ve en otras plataformas. Vea el Tutorial de Oracle . Descubra el optimizadoSet/Mapimplementaciones:EnumSet&EnumMap.Respuestas:
Cámbialo a esto:
La pista está en el error. No necesita calificar las
caseetiquetas con el tipo de enumeración, solo su valor.fuente
Java infiere automáticamente el tipo de elementos
case, por lo que las etiquetas no deben estar calificadas.fuente
MyEnumque no tendría sentido.static final int MY_CONST = 7; …; switch(intVariable) {case MY_CONST: …;}lugar decase 7. Entonces, esta restricción para las enumeraciones no tiene sentido (puedo usar no solo literales primarios, sino también constantes definidas manualmente para laswitchexpresión entera , pero no puedo usar constantes definidas manualmente, sino solo nombres primarios para las enumeraciones).esto debería hacer:
fuente
Incorrecto:
Correcto:
fuente
Así es como lo estoy usando. Y está funcionando fantásticamente.
Y el
switch-caseque se muestra a continuaciónfuente
Escribe
someMethod()de esta manera:En la instrucción switch, debe usar solo el nombre constante.
fuente