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_A
debe 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
Enum
es 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
/Map
implementaciones:EnumSet
&EnumMap
.Respuestas:
Cámbialo a esto:
La pista está en el error. No necesita calificar las
case
etiquetas 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
MyEnum
que 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 laswitch
expresió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-case
que se muestra a continuaciónfuente
Escribe
someMethod()
de esta manera:En la instrucción switch, debe usar solo el nombre constante.
fuente