285 votes

Un « exploitant forestier en final statique » devrait être déclaré en majuscules ?

En Java, static final variables sont constantes, et la convention est qu'ils doivent être en majuscules. Cependant, j'ai vu que la plupart des gens déclarer enregistreurs de bas-de-casse qui se présente comme une violation de la PMD.

e.g:

private static final Logger logger = Logger.getLogger(MyClass.class);

Juste une recherche sur googleou ALORS "static final logger" et vous verrez par vous-même.

Devrions-nous être à l'aide de l'ENREGISTREUR à la place?

356voto

crunchdog Points 3068

La référence de l’enregistreur n’est pas une constante, mais une dernière référence et ne devrait pas être en majuscules. Une constante de valeur doit être en majuscules.

290voto

cbliard Points 1176

Pour ajouter plus de valeur à crunchdog de la réponse, Le Style de Codage Java Guider les états dans ce paragraphe 3.3 Champ de Nommage

Noms de domaines utilisés comme des constantes doivent être tous les cas supérieur, avec des traits de soulignement séparant les mots. Les éléments suivants sont considérés comme des constantes:

  1. Tous static final types primitifs (Rappelez-vous que toutes les interface des champs sont intrinsèquement static final).
  2. Tous static final objet de référence des types qui ne sont jamais suivies par "." (point).
  3. Tous static final tableaux qui ne sont jamais suivies par "[" (point).

Exemples:

MIN_VALUE, MAX_BUFFER_SIZE, OPTIONS_FILE_NAME

Suite à cette convention, logger est static final référence de l'objet comme indiqué au point 2, mais parce qu'il est suivi par "." chaque fois que vous l'utilisez, il ne peut pas être considéré comme une constante, et devrait donc être en minuscules.

52voto

Jeffrey Blattman Points 8891

de efficace java, 2nd ed.,

La seule exception à la règle précédente préoccupations "champs constants," dont le nom devrait être composé d'un ou de plusieurs mots séparés par des majuscules le caractère de soulignement, par exemple, des VALEURS ou NEGATIVE_INFINITY. Un constante de champ est un champ statique de la finale de champ dont la valeur est immuable. Si un statique de la finale de champ a un type primitif ou d'un immuable type de référence (Article 15), alors c'est un champ constant. Par exemple, une énumération des constantes sont des champs constants. Si un static final terrain a une référence mutable le type, il peut encore être un champ constant si l'objet référencé est immuable.

en résumé, constant == static final, et en plus, si c'est une référence (par opposition à un type simple), l'immuabilité.

en regardant les slf4j enregistreur, http://www.slf4j.org/api/org/slf4j/Logger.html

il est immuable. d'autre part, la JUIL Enregistreur est mutable. l'enregistreur de log4j est aussi mutable. donc, pour être correcte, si vous utilisez log4j ou slf4j, il doit être "logger", et si vous utilisez slf4j, il convient de l'ENREGISTREUR.

notez que le slf4j la documentation javadoc de la page liée ci-dessus est un exemple dans lequel ils utilisateur "logger", pas "LOGGER".

ce sont bien sûr que des conventions et des règles. si vous arrive d'être en utilisant slf4j et que vous voulez utiliser "logger" parce que vous êtes utilisé pour que d'autres cadres, ou si c'est plus facile à taper, ou pour des raisons de lisibilité, aller de l'avant.

9voto

Pete Kirkham Points 32484

Si vous êtes à l'aide d'un outil automatisé pour vérifier vos normes de codage et il viole ces normes, alors il ou les normes doivent être corrigés. Si vous êtes en utilisant une norme externe, corriger le code.

La convention dans Sun Java est en majuscules pour le public static constantes. Évidemment, un enregistreur n'est pas constante, mais représente une mutable chose ( sinon il n'y aurait pas de point de l'appel de méthodes sur elle dans l'espoir que quelque chose va arriver ); il n'y a pas de norme spécifique pour les non-constante final champs.

6voto

KLE Points 11711

Si vous google, il se peut que, dans certains cas, les bûcherons ne sont pas définis comme statique de la finale. Ajouter un peu de copie rapide-n-coller de ceci, et ceci pourrait expliquer cela.

Nous utilisons LOGGER dans tout notre code, et cela correspond à notre convention d'affectation de noms (et notre CheckStyle est heureux avec elle).


Nous avons même aller plus loin, profitant de la stricte convention de nommage dans Eclipse. Nous créons une nouvelle classe avec un modèle de code de :

    // private static final Logger LOGGER = Logger.getLogger(${enclosing_type}.class);

${current_class} doit être remplacé par la syntaxe correcte pour Eclipse, j'ai oublié.

L'enregistreur est commenté, car au départ, nous n'avons pas besoin il. Mais si nous avons besoin de plus tard, nous venons de dé-commentez-le.

Ensuite, dans le code, nous utilisons des modèles de code qui attendent cet enregistreur d'être présent. Exemple avec le try-catch modèle:

    try {
      ${cursor} or some other template
    } catch (Exception t) {
      LOGGER.error("${methodName} ${method parameters}", t);
    }

Nous avons un peu plus de modèles qui l'utilisent.

La stricte de la convention de nous permettre d'être plus productif et plus cohérente avec les modèles de code.

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