Eu olhei várias perguntas e respostas sobre SO semelhantes a esta questão, mas não encontrei uma solução.
O que eu tenho é um enum que representa diferentes maneiras de ver um Guia de TV ...
Na Application
classe NDroid
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
... quando o usuário altera a visualização, um manipulador de eventos recebe um int
de 0-2 e eu gostaria de fazer algo assim ...
Em um Activity
onClick(DialogInterface dialog, int which)
manipulador de eventos Android
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Estou acostumado com enums C # e instruções select / case que permitiriam algo como o acima e sei que o Java faz as coisas de maneira diferente, mas simplesmente não consigo entender o que preciso fazer.
Terei de recorrer a if
afirmações? Provavelmente haverá apenas 3 opções, então eu poderia fazer isso, mas me perguntei como isso poderia ser feito com switch-case em Java.
EDITAR Desculpe, não expandi completamente o problema, pois estava olhando para ele como um problema Java genérico. Eu acrescentei à pergunta para explicar um pouco mais.
Não há nada que seja específico do Android, e é por isso que não o marquei como Android, mas o enum é definido na Application
classe e o código em que desejo a troca está em um Activity
. O enum é estático, pois preciso acessá-lo de várias atividades.
fonte
case GUIDE_VIEW_SEVEN_DAY
após as importações adequadas; que problema (s) você está tendo?OnClickListener
) é definido pelaDialogInterface
interface que devo implementar.Respostas:
A parte que está faltando é a conversão do número inteiro para o enum de tipo seguro. Java não fará isso automaticamente. Existem algumas maneiras de fazer isso:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Determine o valor enum representado pelo valor int e, a seguir, ative o valor enum.
Você pode achar mais útil / menos sujeito a erros escrever uma
valueOf
implementação customizada que leva seus valores inteiros como um argumento para resolver o valor enum apropriado e permite centralizar sua verificação de limites.fonte
case GuideView.SEVEN_DAY:
dá um erro de compilação, deveria sercase SEVEN_DAY:
.Se
whichView
for um objeto do GuideView Enum, o seguinte funciona bem. Observe que não há qualificador para a constante depoiscase
.fonte
Os enums não devem ser qualificados no rótulo do caso, como o que você tem
NDroid.guideView.GUIDE_VIEW_SEVEN_DAY
, em vez disso, você deve remover a qualificação e usarGUIDE_VIEW_SEVEN_DAY
fonte
Eu gosto de alguns usos do enum Java:
enum com parâmetros de valor:
exemplo de troca:
fonte
Isso deve funcionar da maneira que você descreve. que erro você está tendo? Se você pudesse colar seu código, isso ajudaria.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
EDIT: Tem certeza de que deseja definir um enum estático? Isso não parece certo para mim. Um enum é muito parecido com qualquer outro objeto. Se o seu código compila e executa, mas fornece resultados incorretos, provavelmente é esse o motivo.
fonte
fonte
Exemplo de função associativa curta:
Como @Dhanushka disse, omitir o qualificador dentro de "switch" é a chave.
fonte
Eu estou fazendo como
E usar na instrução Switch
fonte