En Java, las variables finales estáticas son constantes y la convención es que deberían estar en mayúsculas. Sin embargo, he visto que la mayoría de las personas declara a los madereros en minúsculas, lo que se considera una violación en PMD .
p.ej:
private static final Logger logger = Logger.getLogger(MyClass.class);
Simplemente busque en google o SO "logger final estático" y verá esto por sí mismo.
¿Deberíamos usar LOGGER en su lugar?
private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
Respuestas:
La referencia del registrador no es una constante, sino una referencia final, y NO debe estar en mayúscula. Un valor constante debe estar en mayúsculas.
fuente
Para agregar más valor a la respuesta de crunchdog, la Guía de estilo de codificación de Java establece esto en el párrafo 3.3.
Siguiendo esta convención,
logger
es unastatic final
referencia de objeto como se indica en el punto 2, pero debido a que es seguido por ".
" cada vez que lo utilice, no se puede considerar como una constante y por lo tanto debe estar en minúsculas.fuente
Object
y puede llamar a un método como.equals
en ellos..
.De java efectivo, 2da ed.,
En resumen, constante == final estático, más si es una referencia (frente a un tipo simple), inmutabilidad.
Mirando el registrador slf4j, http://www.slf4j.org/api/org/slf4j/Logger.html
Es inmutable. Por otro lado, el registrador JUL es mutable. El log4j logger también es mutable. Para ser correcto, si está utilizando log4j o JUL, debería ser "logger", y si está utilizando slf4j, debería ser LOGGER.
Tenga en cuenta que la página slf4j javadocs vinculada anteriormente tiene un ejemplo en el que usan "logger", no "LOGGER".
Por supuesto, estas son solo convenciones y no reglas. Si está utilizando slf4j y desea utilizar "logger" porque está acostumbrado a eso desde otros marcos, o si es más fácil de escribir, o para facilitar la lectura, continúe.
fuente
Logger
interfaz inmutable ? Solo unfinal class
(me gustaString
oInteger
) puede garantizar la inmutabilidad. Incluso si no puede encontrar ninguna implementación mutable del SLF4JLogger
, nadie puede evitar que escriba uno usted mismo.Me gusta la versión de Google ( Google Java Style )
Ejemplos:
fuente
private static final Logger logger = Logger.getLogger(Finalizer.class.getName());
Si está utilizando una herramienta automatizada para verificar sus estándares de codificación y viola dichos estándares, entonces o los estándares deben ser reparados. Si está utilizando un estándar externo, arregle el código.
La convención en Sun Java es mayúscula para las constantes estáticas públicas. Obviamente, un registrador no es constante, pero representa una cosa mutable (de lo contrario, no tendría sentido invocar métodos con la esperanza de que algo suceda); No existe un estándar específico para los campos finales no constantes.
fuente
Si googleas esto, es posible que en algunos casos, los registradores no estén definidos como estáticos finales. Agregue un poco de copiar y pegar a esto, y esto podría explicarlo.
Usamos LOGGER en todo nuestro código, y esto corresponde a nuestra convención de nomenclatura (y nuestro CheckStyle está contento con eso).
Incluso vamos más allá, aprovechando la estricta convención de nomenclatura en Eclipse. Creamos una nueva clase con una plantilla de código de:
El registrador está comentado, ya que inicialmente no lo necesitamos. Pero si lo necesitamos más tarde, simplemente lo descomentamos.
Luego, en el código, usamos plantillas de código que esperan que este registrador esté presente. Ejemplo con la plantilla try-catch:
Tenemos algunas plantillas más que lo usan.
La convención estricta nos permite ser más productivos y coherentes con las plantillas de código .
fuente
Personalmente, creo que se ve muy grande en mayúsculas. Además, dado que es una clase que no está directamente relacionada con el comportamiento de la clase, no veo un problema importante en el uso en
logger
lugar deLOGGER
. Pero si vas a ser estrictamente pedante, entonces úsaloLOGGER
.fuente
No olvides que PMD respetará un comentario con
en eso. Esto hará que PMD omita la línea de sus controles, esto le permitirá elegir el estilo que desee.
fuente
Por lo general, las constantes están en mayúsculas.
Sin embargo, los registradores no deben ser estáticos, sino que deben buscar cada "nuevo" de la clase que los contiene si se usa la fachada slf4j. Esto evita algunos problemas desagradables del cargador de clases en contenedores web, además, permite que el marco del registrador haga cosas especiales dependiendo del contexto de invocación.
fuente
Prefiero 'logger', es decir, la minúscula. La razón no es que sea una constante o no una constante (mutable o inmutable). Si usáramos ese razonamiento, tendríamos que cambiar el nombre de la variable si cambiamos el marco de registro (o si el marco cambia la mutabilidad de los registradores).
Para mí, otras razones son más importantes.
Un registrador es un objeto sombra en la clase y no debe ser muy prominente ya que no implementa la lógica principal. Si usamos 'LOGGER', es un punto de atracción en el código que atrae demasiada atención.
A veces, los registradores se declaran a nivel de instancia (es decir, no como estáticos) e incluso se inyectan como una dependencia. No me gustaría cambiar mi código si decido cambiar la forma en que obtengo el registrador. El código de estabilidad wrt. Este cambio (hipotético en muchos casos) es la otra razón por la que prefiero la minúscula.
fuente
Si sus estándares de codificación, si tiene alguno, diga que debe estar en mayúscula, entonces sí.
No veo ninguna razón estricta de una manera u otra. Creo que depende totalmente de tus gustos personales resp. los estándares de codificación de su empresa.
Por cierto: prefiero "LOGGER" ;-)
fuente