Hoje tive uma discussão com um colega de trabalho sobre a nomeação de final
campos nas classes Java.
Em sua opinião, os final
campos também devem ser considerados constantes, pois seus valores não serão alterados após a criação da instância.
Isso levaria à seguinte convenção de nomenclatura para final
campos:
public class Foo {
private static final String BLA_BLA = "bla";
private final String BAR_BATZ;
...
}
Na minha opinião, apenas os static final
campos devem ser considerados constantes, enquanto os campos que são apenas final
devem seguir a convenção de nomenclatura camelCase usual.
public class Foo {
private static final String BLA = "bla";
private final String barBatz;
...
}
Agora estou um pouco inseguro, já que ele é um programador muito mais experiente do que eu e geralmente concordo com as opiniões dele e o considero um desenvolvedor muito bom.
Alguma contribuição sobre isso?
...
objetivo era simbolizar qualquer construtor possível que define ofinal
campo, mas obviamente isso não é possível para ostatic final
campo.static { }
blocos que podem ser usados para definir campos estáticos dentro de uma classe uma vez quando a classe é carregada. Trabalho relacionado com o construtor estático em Java .Respostas:
A Sun (e agora Oracle) manteve um documento intitulado Convenções de Código para a Linguagem de Programação Java . A última atualização foi em 99, mas a essência da linha de guia de estilo continua viva.
O capítulo 9 aborda convenções de nomenclatura.
Para um tipo de identificador de 'constantes':
Os exemplos dados:
Em um documento mais recente - ele entrou lá. Das variáveis (Os tutoriais de Java> Aprendendo a linguagem Java> Noções básicas de linguagem :
Muitos analisadores estáticos para Java procuram aplicar isso. Por exemplo, o estilo de verificação impõe:
Isso realmente se resume às convenções da comunidade escrevendo o código ... e, idealmente, mantendo o mesmo.
Os exemplos acima são dados como
static final
aqueles que provavelmente são derivados das convenções C para#define
- que, como C, são substituídos no código durante a compilação e não no tempo de execução.A pergunta que então deve ser feita é "isso está se comportando como uma constante? Ou está se comportando como um campo de gravação única?" - e depois seguindo as convenções em conformidade. O teste decisivo para essa pergunta seria "Se você fosse serializar o objeto, incluiria o campo final?" Se a resposta for uma constante, trate-a como tal (e não a serialize). Por outro lado, se for parte do estado do objeto que precisaria ser serializado, não será uma constante.
Seja qual for o caso, é importante manter o estilo do código, por mais certo ou errado que seja. Problemas piores surgem de convenções inconsistentes em um projeto do que apenas algo que ofende os olhos. Considere obter algumas ferramentas de análise estática e configurá-las para manter a consistência.
fonte
MinWidth
vez deMIN_WIDTH
. Outra pergunta é: e os registradores finais estáticos? Você liga para elesLOG
/LOGGER
oulog
/logger
. Pessoalmente,log
parece melhor alinhado com o código, mas quando é inconsistente aceitável?BAR_BATZ
não é uma constante neste exemplo. Os construtores deFoo
podem configurá-lo para diferentes valores no nível do objeto. Por exemplofonte