De Java à l'aide enum avec l'instruction switch
J'ai regardé divers Q&Comme similaire à cette question, mais n'ai pas trouvé de solution.
Ce que j'ai est un enum qui représente les différentes façons d'afficher un Guide TV...
Dans le NDroid Application
classe
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
...lorsque l'utilisateur change le point de vue d'un gestionnaire d'événement reçoit un int
de 0-2 et je voudrais faire quelque chose comme ça...
Dans un Android Activity
onClick(DialogInterface dialog, int which)
gestionnaire d'événement
//'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Je suis habitué à C# enums et sélectionnez/cas des déclarations qui permettrait à quelque chose comme ci-dessus et je sais que Java fait les choses différemment, mais je n'arrive pas à faire sens de ce que je dois faire.
Vais-je avoir recours à des if
déclarations? Il y aura probablement ne sera jamais que 3 choix si je pouvais le faire, mais je me demandais comment il pourrait être fait avec interrupteur-cas en Java.
MODIFIER Désolé je n'ai pas complètement étendre sur la question que je regardais comme un générique de Java problème. J'ai ajouté à la question, pour expliquer un peu plus loin.
Il n'y a pas tout ce qui est Android spécifique qui est pourquoi je n'ai pas de balise comme Android, mais l'enum est défini dans le Application
classe et le code où je wan pas le commutateur est dans un Activity
. L'enum est statique, comme j'ai besoin d'accéder à de multiples Activités.
- Faut juste être
case GUIDE_VIEW_SEVEN_DAY
après un bon importations; ce problème(s) êtes-vous d'avoir? - Ne pouvez-vous pas juste faire de votre gestionnaire d'événement pour recevoir un enum? A côté de cela, peut-être cela va aider: stackoverflow.com/questions/5292790/...
- Oups désolé, j'ai corrigé le code de montrer comment il est. Eclipse me donne une erreur d'Incompatibilité de Type, disant qu'il ne peut pas convertir de guideView int.
- Ce est une application Android et le gestionnaire d'événements (
OnClickListener
) est définie par laDialogInterface
interface que j'ai à mettre en œuvre. - Oh, vous m'avez manqué ont été à l'obtenir à partir d'un int--désolé, voir Ophidian réponse, bien que je l'avais mis de la fonctionnalité de l'enum.
- Vous pouvez basculer sur un type enum avec enum cas ou sur un entier avec des entiers (haha, une lapalissade). Vous devez d'abord obtenir un enum tapé variable
GuideView e = GuideView.valueOf(i)
ou d'obtenir les valeurs entières de tous les énumérations (le plus tard a l'inconvénient que vous n'êtes pas sûr de la réponse valeurs et devrait ajouter une valeur par défaut: cas.
Vous devez vous connecter pour publier un commentaire.
La pièce qu'il vous manque c'est la conversion de l'entier de la type-safe enum. Java ne le fera pas automatiquement. Il ya un couple de façons que vous pouvez aller à ce sujet:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Déterminer la valeur d'enum représenté par la valeur int et ensuite basculer sur la valeur d'enum.
Vous pouvez trouver plus utile /moins sensibles aux erreurs d'écrire une coutume
valueOf
de mise en œuvre qui prend les valeurs entières, comme un argument pour résoudre le approprié valeur d'enum et vous permet de centraliser votre vérification des limites.case GuideView.SEVEN_DAY:
donne une erreur de compilation, il fautcase SEVEN_DAY:
.Si
whichView
est un objet de la GuideView Enum, suite à des travaux bien. Veuillez noter qu'il n'y a pas de qualificatif pour la constante aprèscase
.Les énumérations ne devraient pas être qualifiés dans le cas de l'étiquette comme ce que vous avez
NDroid.guideView.GUIDE_VIEW_SEVEN_DAY
, au lieu de cela, vous devez supprimer la qualification et l'utilisationGUIDE_VIEW_SEVEN_DAY
J'aime quelques usages de Java enum:
enum avec les paramètres de valeur:
exemple:
Cela devrait fonctionner de la manière que vous décrivez. Quelle erreur avez-vous? Si vous pouviez pastebin votre code qui pourrait l'aider.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
EDIT: Êtes-vous sûr de vouloir définir une statique enum? Ce n'est pas le droit de me. Un enum est un peu comme n'importe quel autre objet. Si votre code compile et s'exécute, mais donne des résultats incorrects, ce serait probablement pourquoi.
Court associatif, fonction exemple:
Comme @Dhanushka dit, omettre le qualificatif à l'intérieur de "switch" est la clé.
Je le fais comme
Et l'utilisation de l'Instruction Switch