Bonjour à tous !
Je me demandais, si j'ai un petit programme avec plusieurs classes qui utilisent une variable constante, est-ce que je dois juste la déclarer dans le main ? Ou bien dans chaque classe qui l'utilise ?
Merci :)
Version imprimable
Bonjour à tous !
Je me demandais, si j'ai un petit programme avec plusieurs classes qui utilisent une variable constante, est-ce que je dois juste la déclarer dans le main ? Ou bien dans chaque classe qui l'utilise ?
Merci :)
Salut,
Si tu parles d'une final static (parce qu'une variable qui est constante, c'est contradictoire), il suffit de la déclarer en public dans une des classes, celle la plus logique :
Par exemple :
Et tu peux la référencer...Code:
1
2
3
4
5
6 public class Resources { public final static Image ICON_APPLICATION = ...; }
Code:
1
2
3
4
5
6
7
8
9
10 public class UneClasse { public UneClasse() { Image image = Resources.ICON_APPLICATION; } }
De toute manière, le compilateur pourra optimiser en faisant les "copies" qu'ils jugera nécessaires (donc inutile de faire cette copie toi-même).Code:
1
2
3
4
5
6
7
8
9
10 public class UneAutreClasse { public UneAutreClasse () { Image image = Resources.ICON_APPLICATION; } }
Bonjour Hardedoc,
Une constante par définition est... constante ;) Tu ne dois donc la déclarer que dans une seule classe.
D’ailleurs, si tu déclarais la même constante dans différentes classes, il s'agirait en fait de constantes différentes (liées à la classe dans laquelle elle est déclarée): Avec le même nom sans doute mais avec potentiellement des valeurs différentes.
Il te faut donc déclarer une seule constante comme suit:
Et pour l'utiliser:Code:public static final String MA_CONSTANTE = "valeur fixe";
A+Code:
1
2
3
4
5 NomDeLaClasseContenantLaConstante.MA_CONSTANTE // ou import static nom.du.package.NomDeLaClasseContenantLaConstante.MA_CONSTANTE; ... System.out.println(MA_CONSTANTE);
Et bien j'ai un fichier avec mon main et deux classes ( Participant et Concours par exemple )
J'ai mis un final static int NBQUESTIONS = 10; dans mon fichier main mais je suis obligé de retaper cette ligne dans mes 2 classes sinon ça ne fonctionne pas.
Ça me paraît louche de devoir le réécrire à chaque fois... Il y a peut-être quelque chose que j'ai mal fais ?
C'est parce qu'il faut indiquer le nom de la classe en préfixe (sinon le compilateur ne sait pas où aller chercher cette constante). D'ailleurs, les conventions demandent à ce qu'on précise le nom de la classe y compris lorsqu'on utilise la variable dans la classe qui la déclare :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class UneClasse { public final static String UNE_CONSTANTE = "TRUC"; public void uneMethode() { // on utilise la constante System.out.println( UneClasse.UNE_CONSTANTE ); } }