cs_Escap
Messages postés12Date d'inscriptionsamedi 13 septembre 2003StatutMembreDernière intervention11 février 2011
-
8 mai 2007 à 22:24
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 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
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 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;
// ...
}
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
super_toinou
Messages postés764Date d'inscriptionmardi 25 mai 2004StatutMembreDernière intervention 8 mars 20116 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.
super_toinou
Messages postés764Date d'inscriptionmardi 25 mai 2004StatutMembreDernière intervention 8 mars 20116 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 !!
super_toinou
Messages postés764Date d'inscriptionmardi 25 mai 2004StatutMembreDernière intervention 8 mars 20116 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.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."