Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1621 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  enum à plusieurs membres et switch

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

enum à plusieurs membres et switch

n°1662043
Sp4M-
Posté le 21-12-2007 à 17:46:17  profilanswer
 

Bonjour,
 
j'ai un petit soucis actuellement avec l'enum de java, que je souhaite utiliser avec un switch.
Basiquement, je voudrais utiliser le switch sur un type int (qui est final comme il se doit pour etre connu à la compilation),
mais j'obtiens quand même le traditionnel "case expressions must be constant expressions".
 
Voila le code de mon enum :
 

Code :
  1. public enum SubmenuItems {
  2. MENU_NEW (0, "New" ),
  3. MENU_OPEN (1, "Open" ),
  4. MENU_SAVE (2, "Save" ),
  5. MENU_SAVEAS (3, "Save As ..." ),
  6. MENU_PRINT (4, "Print" );
  7. public final int ID;
  8. public final String Name;
  9. SubmenuItems(int ID, String Name) {
  10.  this.ID = ID;
  11.  this.Name = Name;
  12. }
  13. }


 
Et le switch :

Code :
  1. int menu_ID = -1;
  2. ...
  3. switch (menu_ID) {
  4. case SubmenuItems.MENU_NEW.ID:
  5. ...
  6. break;
  7. }


 
Aurais-je raté quelque chose dans la déclaration de mon enum ?

mood
Publicité
Posté le 21-12-2007 à 17:46:17  profilanswer
 

n°1662105
masklinn
í dag viðrar vel til loftárása
Posté le 21-12-2007 à 19:13:04  profilanswer
 

Faut pas utiliser l'ID, faut directement utiliser l'enum

Message cité 1 fois
Message édité par masklinn le 21-12-2007 à 19:13:22

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1662172
Sp4M-
Posté le 21-12-2007 à 20:43:26  profilanswer
 

masklinn a écrit :

Faut pas utiliser l'ID, faut directement utiliser l'enum


 
Tu veux dire comme ca ?
 

Code :
  1. switch (menu_ID) {
  2. case SubmenuItems.MENU_NEW:
  3. ...
  4. break;
  5. }


 
Ca me sort un joli "Type mismatch: cannot convert from SubmenuItems to int"
Ce qui est comprehensible vu que MENU_NEW contient effectivement plusieurs champs, j'imagine qu'il faut lui specifier quand même d'une facon ou d'une autre celui qu'on veut utiliser ..

n°1662176
zapan666
Tout est relatif
Posté le 21-12-2007 à 20:47:43  profilanswer
 

Sp4M- a écrit :


 
Tu veux dire comme ca ?
 

Code :
  1. switch (menu_ID) {
  2. case SubmenuItems.MENU_NEW:
  3. ...
  4. break;
  5. }


 
Ca me sort un joli "Type mismatch: cannot convert from SubmenuItems to int"
Ce qui est comprehensible vu que MENU_NEW contient effectivement plusieurs champs, j'imagine qu'il faut lui specifier quand même d'une facon ou d'une autre celui qu'on veut utiliser ..


et pourquoi passe tu "l'index" de ton enum a la place de passer l'enum directement a ta méthode ?


---------------
my flick r - Just Tab it !
n°1662182
Sp4M-
Posté le 21-12-2007 à 20:54:05  profilanswer
 

zapan666 a écrit :


et pourquoi passe tu "l'index" de ton enum a la place de passer l'enum directement a ta méthode ?


 
Hum, à vrai dire parce que j'ai pas "tellement" le choix ... je travaille sur un enorme projet qui a été codé ainsi, et je ne dispose ici que de l'index de cet enum ... Mais ce serait effectivement surement plus simple de faire le switch sur l'enum complet si je pouvais, comme tu dis.
 
Si il n'y a vraiment aucune autre solution, j'essayerais de modifier le code pour recuperer l'enum plus tôt dans le code...  :jap:  
Mais je voulais m'assurer avant qu'il n'y avait pas une solution plus "soft" ;)

n°1662183
masklinn
í dag viðrar vel til loftárása
Posté le 21-12-2007 à 21:06:37  profilanswer
 

Sp4M- a écrit :


 
Hum, à vrai dire parce que j'ai pas "tellement" le choix ... je travaille sur un enorme projet qui a été codé ainsi, et je ne dispose ici que de l'index de cet enum ... Mais ce serait effectivement surement plus simple de faire le switch sur l'enum complet si je pouvais, comme tu dis.
 
Si il n'y a vraiment aucune autre solution, j'essayerais de modifier le code pour recuperer l'enum plus tôt dans le code...  :jap:  
Mais je voulais m'assurer avant qu'il n'y avait pas une solution plus "soft" ;)


Crée une méthode statique dans ton énum genre fromId qui te servira à convertir ton ID moisi en un beau objet de l'enum.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1662188
Sp4M-
Posté le 21-12-2007 à 21:24:17  profilanswer
 

masklinn a écrit :

un beau objet de l'enum.


 
Hum .. On peut instancier un enum ?
 
J'ai quand même testé par curiosité mais : Cannot instantiate the type SubmenuItems

n°1662190
Sp4M-
Posté le 21-12-2007 à 21:27:46  profilanswer
 

Cela dit, le problème semble s'etendre un peu plus que ca ...
 
Même avec un
 

Code :
  1. SubmenuItems s;
  2.  switch(s) {
  3.   case SubmenuItems.MENU_NEW:
  4.   break;
  5.  }


 
On arrive à un : The enum constant SubmenuItems.MENU_NEW reference cannot be qualified in a case label
La j'suis un peu perdu pour le coup ...  :??:

n°1662191
zapan666
Tout est relatif
Posté le 21-12-2007 à 21:28:31  profilanswer
 

masklinn a écrit :


Crée une méthode statique dans ton énum genre fromId qui te servira à convertir ton ID moisi en un beau objet de l'enum.


Code :
  1. SubmenuItems.values()[menu_id] ;

?


---------------
my flick r - Just Tab it !
n°1662194
masklinn
í dag viðrar vel til loftárása
Posté le 21-12-2007 à 21:36:31  profilanswer
 

zapan666 a écrit :


Code :
  1. SubmenuItems.values()[menu_id] ;

?


Aussi, mais c'est sale :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 21-12-2007 à 21:36:31  profilanswer
 

n°1662196
Sp4M-
Posté le 21-12-2007 à 21:39:02  profilanswer
 

Ah oui aussi ... c'est un peu cowboy mais pourquoi pas, merci à vous deux ;)  
 
Cela dit, ca nous renvoit à l'autre probleme :
 

Code :
  1. switch(SubmenuItems.values()[menu_ID]) {
  2. case SubmenuItems.MENU_NEW:
  3. break;
  4. }


 
Renvoit : The enum constant SubmenuItems.MENU_NEW reference cannot be qualified in a case label

Message cité 1 fois
Message édité par Sp4M- le 21-12-2007 à 21:39:37
n°1662234
Sp4M-
Posté le 22-12-2007 à 00:41:47  profilanswer
 

Bon je me repond à moi même, mais voila la solution si ca interesse quelqu'un ...
 
Ce n'est pas :

Code :
  1. switch(SubmenuItems.values()[menu_ID]) {
  2. case SubmenuItems.MENU_NEW:
  3. break;
  4. }


 
mais (avec la methode cowboy de zapan666) :

Code :
  1. switch(SubmenuItems.values()[menu_ID]) {
  2. case MENU_NEW:
  3. break;
  4. }


 
ou :

Code :
  1. switch(SubmenuItems.fromID(menu_ID)) {
  2. case MENU_NEW:
  3. break;
  4. }


Si on veut faire effectivement plus propre.
 
merci  ;)


Message édité par Sp4M- le 22-12-2007 à 00:42:25
n°1662331
zapan666
Tout est relatif
Posté le 22-12-2007 à 13:34:41  profilanswer
 

oui mais non, mais là, ça marche car coup de pôt, l'index de l'enum colle avec les IDs que tu as mis :S
 
(inverse 2 lignes sur ton enum et tu aura des résultats incoherents)


---------------
my flick r - Just Tab it !
n°1686589
loic-jaoue​n
Posté le 14-02-2008 à 22:19:48  profilanswer
 

Sp4M- a écrit :

Ah oui aussi ... c'est un peu cowboy mais pourquoi pas, merci à vous deux ;)  
 
Cela dit, ca nous renvoit à l'autre probleme :
 

Code :
  1. switch(SubmenuItems.values()[menu_ID]) {
  2. case SubmenuItems.MENU_NEW:
  3. break;
  4. }


 
Renvoit : The enum constant SubmenuItems.MENU_NEW reference cannot be qualified in a case label


 
Si tu fais d'abord un:

Code :
  1. import static com.monpackage.SubmenuItems.*


tu peux ensuite faire un case:

Code :
  1. switch(menu_ID) {
  2. case MENU_NEW:
  3. break;
  4. }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  enum à plusieurs membres et switch

 

Sujets relatifs
Validation de plusieurs formulaire avec un seul boutonintégration de plusieurs swf dans une page html
lecture de plusieurs fichiers avec iostreamoracle : create table avec plusieurs références facultatives
[Resolu] Php + plusieurs bases AccessMacro à appliquer à plusieurs cellules
[BATCH] recherche de dossier sur plusieurs serveurs[C] Prendre plusieurs argument en compte
Recherche fonction pour ajouter plusieurs fois un meme paragraphe[PHP] Upload de fichier en plusieurs parties
Plus de sujets relatifs à : enum à plusieurs membres et switch


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR