Primeiro, afirmo que estou muito mais familiarizado com enumerações em C # e parece que enumerações em java são uma bagunça.
Como você pode ver, estou tentando usar uma instrução switch @ enums no meu próximo exemplo, mas sempre recebo um erro, não importa o que esteja fazendo.
O erro que recebo é:
O rótulo da caixa qualificado
SomeClass.AnotherClass.MyEnum.VALUE_A
deve ser substituído pela constante enum não qualificadaVALUE_A
O problema é que compreendi bem o erro, mas não posso simplesmente escrever o VALUE_A, pois o enum está localizado em outra subclasse. Existe alguma maneira de resolver este problema? E por que isso está acontecendo em 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
fonte
fonte
Enum
é extremamente útil quando você pega o jeito - não é uma bagunça. Eles são muito mais flexíveis e práticos do que enums simples (apenas um valor inteiro rotulado), como visto em outras plataformas. Veja o Tutorial do Oracle . Descubra as otimizadasSet
/Map
implementações:EnumSet
&EnumMap
.Respostas:
Altere para este:
A pista está no erro. Você não precisa qualificar
case
rótulos com o tipo de enumeração, apenas seu valor.fonte
Java deduz automaticamente o tipo dos elementos
case
, portanto, os rótulos devem ser desqualificados.fonte
MyEnum
que não faria sentido.static final int MY_CONST = 7; …; switch(intVariable) {case MY_CONST: …;}
vez decase 7
. Portanto, essa restrição para enumerações não faz sentido (eu posso usar não apenas literais primários, mas também constantes definidas manualmente paraswitch
expressão inteira , mas não posso usar constantes definidas manualmente, mas apenas nomes primários para enumerações).isto deve fazer:
fonte
Errado:
Certo:
fonte
É assim que eu estou usando. E está funcionando de maneira fantástica -
E o
switch-case
como mostrado abaixofonte
Escreva
someMethod()
desta maneira:Na instrução switch, você deve usar apenas o nome da constante.
fonte