Pergunta

Porque as pessoas estão tão enfático sobre como fazer todas as variáveis ??dentro de uma classe "final"? Eu não acredito que haja qualquer verdadeiro benefício para a adição final para as variáveis ??locais privados, ou realmente usar final para outra coisa senão constantes e passando variáveis ??em classes internas anônimas.

Eu não estou olhando para começar qualquer tipo de guerra chama, eu honestamente quero saber por que isso é tão importante para algumas pessoas. Estou faltando alguma coisa?

Foi útil?

Solução

  1. Intenção. Outras pessoas modificando seu código não vai alterar os valores que não devem mudar.

  2. otimizações do compilador pode ser feita se o compilador sabe o valor de um campo nunca vai mudar.

Além disso, se todas as variáveis ??em uma classe é final (como você se refere em seu post), então você tem uma classe imutável (contanto que você não exponha referências a propriedades mutáveis) que é uma excelente maneira de conseguir thread-segurança.

Outras dicas

A desvantagem, é que

annoy it is hard
annoy to read
annoy code or anything
annoy else when it all 
annoy starts in the 
annoy same way

Além do uso óbvio para criar constantes e impedindo subclassificação / substituir, é uma preferência pessoal na maioria dos casos uma vez que muitos acreditam que os benefícios do "mostrando programador intenção" são superados pela legibilidade do código real. Muitos preferem um pouco verbosidade menos.

Como para otimizações, que é uma razão pobre para usá-lo ( sentido em muitos casos ). É a pior forma de micro otimização e nos dias de JIT não serve para nada.

Gostaria de sugerir para usá-lo se você preferir, não se é isso que você preferir. Uma vez que tudo vai descer para argumentos religiosos, em muitos casos, não se preocupe com isso.

marcas que eu não estou esperando que o valor para a mudança, que é documentação livre. A prática é porque claramente comunica a intenção de que a variável e força o compilador para verificar isso. Além disso, ele permite que o compilador para fazer otimizações.

É importante porque imutabilidade é importante, particularmente quando se trata de um modelo de memória compartilhada. Se alguma coisa é imutável, então é thread-safe, que faz com que seja bom o suficiente um argumento a seguir como uma boa prática.

http://www.artima.com/intv/blochP.html

Um benefício para a programação concorrente que não tenha sido mencionado ainda:

campos finais são garantidos para ser inicializado quando a execução do construtor é concluída.

Um projeto que estou trabalhando atualmente em está configurado de forma que sempre que um prensas "salvar" no Eclipse, o modificador final é adicionado a cada variável ou campo que não é alterado no código. E ainda não tem ninguém ferido.

Existem muitas boas razões para utilizar final, como observado em outros lugares. Um lugar onde não vale a pena, IMO, é sobre os parâmetros para um método. Estritamente falando, a palavra-chave agrega valor aqui, mas o valor não é alto o suficiente para suportar a sintaxe feio. Eu prefiro expressar esse tipo de informação através de testes de unidade.

Eu acho que o uso de valores mais finais que são interna para uma classe é um exagero a menos que a classe é provavelmente vai ser herdada. A única vantagem é em torno das otimizações do compilador, o que certamente podem beneficiar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top