371 votes

Quelle est la meilleure façon d'implémenter les constantes en Java ?

J'ai vu des exemples comme celui-ci :

public class MaxSeconds {
   public static final int MAX_SECONDS = 25;
}

et j'ai supposé que je pouvais avoir une classe Constants pour envelopper les constantes, en les déclarant static final. Je ne connais pratiquement rien à Java et je me demande si c'est la meilleure façon de créer des constantes.

1 votes

Juste pour ajouter constantes java : public/privé

0 votes

18voto

albus.ua Points 96

J'utilise l'approche suivante :

public final class Constants {
  public final class File {
    public static final int MIN_ROWS = 1;
    public static final int MAX_ROWS = 1000;

    private File() {}
  }

  public final class DB {
    public static final String name = "oups";

    public final class Connection {
      public static final String URL = "jdbc:tra-ta-ta";
      public static final String USER = "testUser";
      public static final String PASSWORD = "testPassword";

      private Connection() {}
    }

    private DB() {}
  }

  private Constants() {}
}

Alors, par exemple, j'utilise Constants.DB.Connection.URL pour devenir constant. Cela ressemble plus à un "objet orienté" pour moi.

17voto

Kevin Day Points 9446

La création de constantes statiques finales dans une classe distincte peut vous attirer des ennuis. En effet, le compilateur Java optimise cette opération et place la valeur réelle de la constante dans toute classe qui la référence.

Si, par la suite, vous modifiez la classe "Constants" et que vous ne procédez pas à une recompilation complète des autres classes qui font référence à cette classe, vous vous retrouverez avec une combinaison des anciennes et des nouvelles valeurs utilisées.

Au lieu de les considérer comme des constantes, pensez-y comme des paramètres de configuration et créez une classe pour les gérer. Faites en sorte que les valeurs soient non finales, et envisagez même d'utiliser des getters. À l'avenir, lorsque vous déterminerez que certains de ces paramètres doivent effectivement être configurables par l'utilisateur ou l'administrateur, ce sera beaucoup plus facile à faire.

13voto

Yann Ramin Points 25139

L'erreur numéro un que vous pouvez commettre est de créer une classe accessible globalement appelée par un nom générique, comme Constants. Cette classe est simplement remplie de déchets et vous perdez toute possibilité de savoir quelle partie de votre système utilise ces constantes.

Au contraire, les constantes doivent être placées dans la classe qui les "possède". Avez-vous une constante appelée TIMEOUT ? Elle devrait probablement être placée dans votre classe Communications() ou Connection(). MAX_BAD_LOGINS_PAR_HEURE ? Elle doit être intégrée à la classe User(). Et ainsi de suite.

L'autre utilisation possible est celle des fichiers Java .properties lorsque des "constantes" peuvent être définies au moment de l'exécution, mais ne sont pas facilement modifiables par l'utilisateur. Vous pouvez les regrouper dans vos fichiers .jars et les référencer avec le ResourceLoader de la classe.

6voto

Jason Cohen Points 36475

C'est la bonne façon de faire.

En général, les constantes sont pas conservées dans des classes "Constantes" distinctes parce qu'elles ne peuvent pas être découvertes. Si la constante est pertinente pour la classe actuelle, le fait de la conserver aide le prochain développeur.

5voto

Sébastien D. Points 61

Qu'en est-il d'une énumération ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X