Java: uso de una declaración de cambio con enumeración en la subclase

Resuelto Popokoko asked hace 12 años • 8 respuestas

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_Adebe 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;
            }
        }
    }
}
Popokoko avatar Apr 15 '12 17:04 Popokoko
Aceptado

Cámbielo a esto:

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

La pista está en el error. No es necesario calificar caselas etiquetas con el tipo de enumeración, solo su valor.

darrengorman avatar Apr 15 '2012 11:04 darrengorman

Equivocado:

case AnotherClass.MyEnum.VALUE_A

Bien:

case VALUE_A:
Akash Yellappa avatar Mar 07 '2019 22:03 Akash Yellappa

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
}
Kru avatar Apr 15 '2012 11:04 Kru

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;
            }
        }
    }
}
Woyzeck avatar Apr 15 '2012 11:04 Woyzeck