Question

Pourquoi les gens sont si emphatique de faire toutes les variables dans une classe « finale »? Je ne crois pas qu'il y ait un véritable avantage à l'ajout final à des variables locales privées, ou vraiment utiliser finale pour autre chose que des constantes et des variables de passage dans les classes internes anonymes.

Je ne cherche pas à commencer une sorte de guerre de la flamme, je ne veux honnêtement savoir pourquoi cela est si important pour certaines personnes. Est-ce que je manque quelque chose?

Était-ce utile?

La solution

  1. Intention. D'autres personnes modifiant votre code ne changera pas les valeurs qu'ils ne sont pas censés changer.

  2. Les optimisations du compilateur peuvent être faites si le compilateur connaît la valeur d'un champ ne changera jamais.

En outre, si chaque variable dans une classe est définitive (comme vous faites référence dans votre poste), alors vous avez une classe immuable (tant que vous n'exposez pas les références aux propriétés mutables) qui est une excellente façon d'atteindre fil de sécurité.

Autres conseils

L'inconvénient est que

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

Autre que l'utilisation évidente pour créer des constantes et la prévention subclassing / primordiale, il est une préférence personnelle dans la plupart des cas car beaucoup croient que les avantages de « manifeste son intention de programmeur » sont contrebalancés par la lisibilité du code réel. Beaucoup préfèrent un peu moins verbosité.

En ce qui concerne Optimisations, qui est une mauvaise raison pour l'utiliser ( dénuée de sens dans de nombreux cas ). Il est la pire forme de micro optimisation et dans les jours de JIT ne sert à rien.

Je suggère de l'utiliser si vous préférez, ne le faites pas si vous c'est ce que vous préférez. Depuis tout cela va jusqu'à des arguments religieux dans de nombreux cas, ne vous inquiétez pas.

Il marque que je ne m'y attendais pas la valeur à changer, ce qui est une documentation libre. La pratique est parce qu'il clairement communique l'intention de cette variable et les forces du compilateur pour vérifier. Au-delà, il permet au compilateur de faire des optimisations.

Il est important parce que immuabilité est important, en particulier lorsqu'il s'agit d'un modèle de mémoire partagée. Si quelque chose est immuable alors il est thread-safe, qui le rend assez bien un argument de suivre comme une meilleure pratique.

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

L'un des avantages pour la programmation concurrente qui n'a pas été encore mentionné:

champs finaux sont garantis à initialiser lorsque l'exécution du constructeur est terminée.

Un projet sur lequel je travaille actuellement sur la configuration est d'une manière que chaque fois que l'on presse « sauver » dans Eclipse, le modificateur de final est ajouté à chaque variable ou d'un champ qui n'est pas changé dans le code. Et il a du mal encore personne.

Il y a beaucoup de bonnes raisons d'utiliser finale, comme il est indiqué ailleurs. Un endroit où il est pas la peine, l'OMI, est sur les paramètres à une méthode. A proprement parler, le mot-clé ajoute de la valeur, mais la valeur est assez élevée pour supporter la syntaxe laid. Je préfère exprimer ce genre d'information par le biais des tests unitaires.

Je pense que l'utilisation de la finale sur les valeurs qui sont intérieure à une classe est un overkill à moins que la classe va probablement être héritée. Le seul avantage est autour des optimisations du compilateur, ce qui peut certainement bénéficier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top