Question

Par exemple:

public void doSomething() {

    final double MIN_INTEREST = 0.0;

    // ...  
}

Personnellement, je préférerais que ces constantes de substitution soient déclarées de manière statique au niveau de la classe. Je suppose que je recherche un "point de vue de l’industrie". sur le sujet.

Était-ce utile?

La solution

Ma position de départ est que chaque variable ou constante doit être déclarée / initialisée aussi proche que possible de sa première utilisation (c'est-à-dire, ne coupez pas un bloc logique de code en deux, juste pour déclarer quelques lignes plus proches), et portée aussi étroitement que possible. - À moins que vous ne puissiez me donner une sacrée bonne raison pour laquelle cela devrait être différent.

Par exemple, une méthode étendue final ne sera pas visible dans l'API publique. Parfois, cette information peut être utile aux utilisateurs de votre classe et doit être déplacée vers le haut.

Dans l'exemple que vous avez donné dans la question, je dirais que MIN_INTEREST est probablement l'une de ces informations qu'un utilisateur souhaiterait mettre la main sur et elle devrait être étendue à la classe, pas à la méthode. (Bien que, l'exemple de code ne contienne pas de contexte, et mon hypothèse pourrait être complètement fausse.)

Autres conseils

Je pense que vous ne devriez les placer au niveau de la classe que s'ils sont utilisés par plusieurs méthodes. Si elle n’est utilisée que dans cette méthode, cela m’a l’air de plaire.

Techniquement, il n’existe pas de "constante de portée de méthode". en Java. Vous faites référence à une simple variable locale; il est créé et détruit à chaque invocation de méthode.

http://www.java-tips.org/java-se-tips/java.lang/how-do-i-declare-a-constant-in-java.html

La dissimulation de l’information et la modularité sont des principes clés, et une portée étroite permet une meilleure dissimulation de l'information. Si la méthode n'a besoin que de la constante, la dissimulation est bonne. Si et quand la constante est utile ailleurs, amenez-la à une portée plus large, mais aussi largement que nécessaire.

Vous êtes probablement inquiet car il s’agit d’une constante. Elle peut donc sembler appartenir à une table de propriétés globales. Peut-être que si. Peut-être que non. Votre préoccupation est valable, mais il n’existe pas de meilleur endroit pour toutes les constantes.

J'ai moi-même utilisé cette méthode pour les constantes, mais de temps en temps, un collègue la modifie lors de la révision du code. Encore une fois, ces collègues ne sont pas en lecture / écriture open source, mais ils sont habitués aux logiciels d’entreprise.

Je leur dis qu'il n'est pas logique d'utiliser une constante de niveau de classe si elle est utilisée dans une seule méthode, mais j'ai trouvé plus d'un collègue qui insiste pour qu'elle soit déplacée vers le haut. Je me plie généralement car je ne suis pas aussi rigide que si cela affecte la lisibilité et / ou les performances.

J'ai un point de vue différent: IMHO, il vaut mieux les placer au niveau fichier / classe, surtout si vous travaillez en équipe pour cette raison: disons que vous commencez avec un petit morceau de code ...

public void doSomething() {

  final double MIN_INTEREST = 0.0;

  // ...  
}

et les autres membres de votre équipe développent la classe avec un tas de méthodes. Cette classe est maintenant une magnifique classe 500 lignes / 50 méthodes . Imaginez l’expérience d’un ingénieur qui tente d’ajouter une nouvelle méthode avec une constante, il lui faudra 1 analyser toute la classe à la recherche de constantes correspondant à ses besoins, 2 . déplacez la constante vers la portée de la classe en espérant qu'il n'y a pas de conflit avec le code existant et que 3 ajoute également sa méthode.

Si vous préférez commencer par ajouter toutes les constantes à la portée du fichier / de la classe, les ingénieurs disposent d’un seul emplacement 1 pour rechercher les constantes existantes et 2 en dérive des constantes. d'autres où c'est logique. (Par exemple, si vous avez une constante pour pi , vous pouvez également définir une nouvelle constante avec une valeur de pi / 2 ).

Si vous pouvez définir une variable finale au niveau de la classe ou de la méthode (local), c’est parce que vous pouvez remplacer la constante statique globale dans la méthode (locale).

Exemple:

public class Test {

    final double MIN_INTEREST = 0.0;

    /**
     * @param args
     */
    public static void main(String[] args) {


        Test test = new Test();

        test.doSomethingLocal();
        test.doSomethingGlobal();

    }

    public void doSomethingGlobal() {

        System.out.println("Global-> " + MIN_INTEREST);

    }

    public void doSomethingLocal() {

        final double MIN_INTEREST = 0.1;

        System.out.println("Local-> " + MIN_INTEREST);

    }
}

Le résultat sera:

Local-> 0.1
Global-> 0.0

Votre question n'a donc aucun sens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top