Hoy tuve una discusión con un compañero de trabajo sobre el nombre de los final
campos en las clases de Java.
En su opinión, los final
campos también deben considerarse constantes, ya que sus valores no cambiarán después de la creación de la instancia.
Esto llevaría a la siguiente convención de nomenclatura para final
campos:
public class Foo {
private static final String BLA_BLA = "bla";
private final String BAR_BATZ;
...
}
En mi opinión, solo los static final
campos deben considerarse constantes, mientras que los campos que solo final
deben seguir la convención de nomenclatura habitual de camelCase.
public class Foo {
private static final String BLA = "bla";
private final String barBatz;
...
}
Ahora estoy un poco inseguro ya que es un programador mucho más experimentado que yo y, por lo general, estoy de acuerdo con sus opiniones y lo considero un muy buen desarrollador.
¿Alguna aportación sobre esto?
...
objetivo era simbolizar cualquier posible constructor que establezca elfinal
campo, pero obviamente eso no es posible para elstatic final
campo.static { }
bloques que se pueden usar para establecer campos estáticos dentro de una clase una vez que se carga la clase. Trabajo relacionado con el constructor estático en Java .Respuestas:
Sun (y ahora Oracle) mantuvo un documento titulado Convenciones de código para el lenguaje de programación Java . La última actualización de esto fue en el '99, pero la esencia de la línea de guía de estilo sigue viva.
El capítulo 9 cubre las convenciones de nomenclatura.
Para un tipo de identificador de 'constantes':
Los ejemplos dados:
En un documento más reciente, se deslizó allí. De Variables (Los Tutoriales de Java> Aprendizaje del lenguaje Java> Conceptos básicos del lenguaje :
Muchos analizadores estáticos para Java buscan hacer cumplir esto. Por ejemplo, el estilo de control impone:
Esto realmente se reduce a las convenciones de la comunidad que escribe el código ... e idealmente lo mantiene igual.
Los ejemplos anteriores se dan como
static final
los que probablemente se derivan de las convenciones de#define
C, que, como C, se reemplazan en el código durante la compilación en lugar de en tiempo de ejecución.La pregunta que debería hacerse es "¿se comporta esto como una constante? ¿O se comporta como un campo de escritura única?" - y luego siguiendo las convenciones en consecuencia. La prueba de fuego para tal pregunta sería "Si tuviera que serializar el objeto, ¿incluiría el campo final?" Si la respuesta es que es una constante, trátela como tal (y no la serialice). Por otro lado, si es parte del estado del objeto que necesitaría ser serializado, entonces no es una constante.
Cualquiera sea el caso, es importante seguir con el estilo del código, por más que sea correcto o incorrecto. Los peores problemas surgen de convenciones inconsistentes dentro de un proyecto que simplemente algo que ofende la vista. Considere obtener algunas herramientas de análisis estático y configúrelas para mantener la coherencia.
fuente
MinWidth
lugar deMIN_WIDTH
. Otra pregunta es: ¿qué pasa con los registradores finales estáticos? ¿Los llamasLOG
/LOGGER
olog
/logger
? Personalmente, selog
ve mejor en línea con el código, pero ¿cuándo es aceptable la inconsistencia?BAR_BATZ
No es una constante en este ejemplo. Los constructores deFoo
pueden establecerlo en diferentes valores a nivel de objeto. Por ejemplofuente