56 votes

Pourquoi déclarer un argument de fonction définitive?

Je suis actuellement en train de travailler mon chemin à travers le livre "apprendre par Vous-même le Développement d'Applications Android en 24 Heures", publié par Sam. Je suis relativement nouveau à Java, Android ou autre. J'ai une très solide expérience en ActionScript 3, qui a suffisamment de similitudes avec Java, le langage lui-même n'est pas difficile à saisir, mais j'ai encore quelques questions au sujet de la justification des exemples de code dans le livre. Par exemple, voici une fonction qui est livré avec un exemple de code pour 9 Heure:

private void processScores(final TableLayout scoreTable, 
      XmlResourceParser scores) throws IOException, XmlPullParserException{

Dans cette fonction, signature, les auteurs ont déclaré que le scoreTable argument final. Je suis un peu perplexe quant à pourquoi ils ont fait cela. Il ne serait pas traverser mon esprit à même de tenter d'affecter une nouvelle valeur à l'argument de la fonction scoreTable (il est considéré comme une mauvaise pratique en ActionScript). De plus, je n'ai pas réellement vu quelqu'un faire cela à tout de la le monde réel Java j'ai examiné ou porté en AS3.

Est-il quelque chose de spécifique au sujet du développement Android, qui en fait une nécessité parfois de déclarer certains des arguments de la fonction en tant que finale?

Pourquoi le TableLayout objet déclaré finale, mais pas le XmlResourceParser?

89voto

templatetypedef Points 129554

Il y a deux principales raisons pour lesquelles vous pourriez vouloir marquer un argument final. Tout d'abord, si vous prévoyez sur l'utilisation de l'argument dans une anonyme intérieur de la classe, alors vous devez marquer final , de sorte qu'il peut être référencé dans cette catégorie. C'est en fait assez commun en cas d'utilisation pour le marquage des arguments final.

La raison en commun de marquer des arguments final est pour vous empêcher d'écraser accidentellement eux. Si vous ne voulez vraiment pas à modifier les arguments, alors peut-être vous devrait marquer final , de sorte que si vous le faites, vous obtiendrez l'erreur lors de la compilation plutôt que de trouver au moment de l'exécution de votre code a un bug.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X