En java, pourquoi est-il préférable de les déclarer un enregistreur de static final?
private static final Logger S_LOGGER
En java, pourquoi est-il préférable de les déclarer un enregistreur de static final?
private static final Logger S_LOGGER
private
- de sorte qu'aucune autre classe ne peut détourner votre enregistreurstatic
- donc, il y a un seul journal instance de chaque classe, mais aussi pour éviter les tentatives de sérialiser les bûcheronsfinal
- pas besoin de changer l'enregistreur de données au cours de la durée de vie de la classeAussi, je préfère nom log
pour être aussi simple que possible, mais descriptive.
EDIT: Cependant il existe une exception à ces règles:
private final Logger log = LoggerFactory.getLogger(getClass());
par opposition à:
private static final Logger log = LoggerFactory.getLogger(Foo.class);
L'ancien mode vous permet d'utiliser le même nom de l'enregistreur (nom de la classe réelle) dans toutes les classes tout au long de la hiérarchie d'héritage. Donc, si Bar
s'étend Foo
, les deux journaux d' Bar
enregistreur. Certains trouvent qu'il est plus intuitif.
Consultez ce blog post: se Débarrasser de Java Statique Bûcherons. C'est la façon dont vous utilisez slf4j avec jcabi-journal:
import com.jcabi.log.Logger;
class Foo {
void save(File f) {
Logger.info(this, "file %s saved successfully", f);
}
}
Et n'utilisez jamais que le bruit statique.
Pour répondre à cette question, vous devriez avoir demandé ce "statique" et "final".
Pour un Enregistreur, (je suppose que vous parlez de Log4J Enregistreur de classe) vous voulez une catégorie par catégorie. Ce qui devrait conduire au fait que vous l'attribuer qu'une seule fois, et il n'y a pas besoin de plus d'une instance de chaque classe. Et sans doute il n'y a aucune raison pour exposer l'objet Logger d'une classe à une autre, alors pourquoi ne pas le rendre privé et de suivre certaines OO-Principes.
Vous devriez noter, que le compilateur est capable de profiter des avantages de cette. Ainsi, votre code effectue un peu mieux :)
Parce que c'est généralement le genre de fonctionnalité qui peut être partagée à travers toutes les instances de vos objets. Il ne fait pas beaucoup de sens (90% du temps) d'avoir un enregistreur différente pour les deux instances de la même classe.
Cependant, vous pouvez également voir parfois enregistreur de classes déclarées comme des singletons ou même simplement d'offrir des fonctions statiques pour ouvrir une session de votre stuff.
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.