Java: uso de una declaración de cambio con enumeración en la subclase
Primero diré 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 intentando usar una declaración de cambio @ enums en mi próximo ejemplo, pero siempre aparece un error sin importar lo que esté haciendo.
El error que recibo es:
La etiqueta del caso calificado
SomeClass.AnotherClass.MyEnum.VALUE_A
debe reemplazarse con la constante de enumeración no calificada.VALUE_A
La cuestión es que entiendo bastante el error, pero no puedo simplemente escribir VALUE_A ya que la enumeración está ubicada en otra subclase. ¿Hay alguna manera de resolver este problema? ¿Y por qué sucede esto 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;
}
}
}
}
Cámbielo a esto:
switch (enumExample) {
case VALUE_A: {
//..
break;
}
}
La pista está en el error. No es necesario calificar case
las etiquetas con el tipo de enumeración, solo su valor.
Equivocado:
case AnotherClass.MyEnum.VALUE_A
Bien:
case VALUE_A:
Java infiere automáticamente el tipo de elementos en 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;
}
}
}
}