Problème avec l'instruction switch

Résolu
cs_Escap Messages postés 12 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 11 février 2011 - 8 mai 2007 à 22:24
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 9 mai 2007 à 19:45
Bonjour,

mon problème est le suivant: case expression must be constante.

Alors que le code est ainsi

Constante aConstante = new Constante();
switch

(aTypeCase) {

case
aConstante.
aDepa:
...
break;
}

Constante étant une classe regroupant l'ensemble des constantes de l'application.

public

class Constante {
public

final
static int
aDepa = 0;

}

Pourriez vous m'indiquer pourquoi le message d'erreur apparait alors que la variable est déclaré final static car j'aimerai garder cette classe

Merci d'avance pour votre participation.

11 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mai 2007 à 14:15
Salut,

interface / ou les enum du jdk 1.5 selon le besoin mais si tu veux faire des 'patterns' (tu vois j'ai pas oublié toinou ^^) utilise une classe (voir également la création de constantes dans une classe en utilisant le constructeur static)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 mai 2007 à 17:46
Salut:

Personnellement, je pense que l'utilisation d'une interface est un bon choix.
Il faut juste l' implémenter dans une classe donnée pour utiliser ses constantes sans les préfixées par un nom.

public interface Constants {
    public static final int CONSTANTE = 100;
}

public classX implements Constants {
    // ...
    int max = CONSTANTE;
    // ...
}
3
cs_DarkKing Messages postés 17 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 7 juin 2007
9 mai 2007 à 00:42
pronto,

ces lignes

Constante aConstante = new Constante();
aConstante.aDepa

est un peu bizzard, ce qui prouve que tu n'as pas compris le role des membres static
remplace tout ce bazzad par:

Constante.aDepa

encore une chose, le nom de tes variable est plus pire que le mien.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mai 2007 à 00:59
Salut,

de plus si tu veux dédier un objet pour n'y mettre que des 'constantes', n'utilise pas une classe mais une interface (voir une enum) et change ton code par :

public interface Constante {
    ...
    public final static int A_DEPA;
    ...
}

public class "L'objet ou se trouve le switch" implements Constante {
    ...
       switch(eTypeCase) {
          case A_DEPA :
             ...
             break;
          ...

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
9 mai 2007 à 11:18
yop yop,

c est vrai que c est tentant de mettre des interfaces pour des constantes (ca fais moins de code) mais n oublions pas que c est un anti pattern. Suivant ta version de java utilise plutot les imports statiques.

++ Toinou
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mai 2007 à 11:24
Salut,

bof tsé créer une classe pour n'y mettre que des entiers en final static .... il y a mieux quand meme.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
9 mai 2007 à 11:38
Hello,

j ai pas dis le contraire, ca m arrive aussi de faire des interfaces pour ca par pure fleme, c etait juste pour informer que c etait pas dans les bests practices des patterns c est tout !!

++ Toinou
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mai 2007 à 11:51
Salut,

rooo te fache pas hein ^^

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_Escap Messages postés 12 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 11 février 2011
9 mai 2007 à 13:41
Merci à tous pour votre aide, mais Twinuts dit moi quel serait la meilleur façon de faire alors ?
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
9 mai 2007 à 18:04
Yopla tout le monde !

t inquiete pas twinuts, j suis absolument pas faché mais bon vu qu on m a cassé les coui... avec cette histoire dans mon ancienne boite je me permet donc de donner l explication du pourquoi ne pas faire ce qu on appelle "Constant Interface Anti-Pattern" :

Sometimes, people place static members into an interface and inherit from it looking for avoiding prefixing static members with class names. This produce the so-called "Constant Interface" antipattern.

Interfaces are intended for defining types, not providing access to static members. When a class implements an interface, it becomes part of the class's public API, creating an undesirable connection between classes and confusing clients. Even if you remove the access to static members, you still have to implement the constant interface as clients now depend on it.

Using static imports, you can remove the class name prefix from static members without inheriting from the type containing them, and avoiding the aforementioned problems. This is a very clean alternative.

++ Toinou
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mai 2007 à 19:45
Salut,

je suis oki avec toi toinou mais toi même tu sais que dans certains projet les pattern c'est bien c'est beau mais ça ne sert à rien... donc comme je le disais tout dépend de l'usage et c'est pour cela que je n'ai pas exclus les enum ^^

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous