Faire de java de la méthode des arguments final
Quelle différence est-ce que final
fait entre le code ci-dessous. Est-il un avantage à déclarer les arguments final
.
public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){
return ....
}
public String changeTimezone(final Timestamp stamp, final Timezone fTz,
final Timezone toTz){
return ....
}
- Il y a un code d'analyseurs avertir si un paramètre est réutilisé ou réaffectés. (Même pour les variables locales) à mon humble avis, C'est une meilleure façon d'attraper ces paramètres si vous trouvez la modification est undesireable.
- Double Possible de Pourquoi devrais-je utiliser le mot-clé "final" sur un paramètre d'une méthode en Java?
- Je pense que le langage Java doit faire l'entrée de tous les arguments de méthode comme définitive par défaut. Et puis, si je veux modifier la référence, je dois le faire manuellement. De cette façon, la culpabilité facteur permettrait d'éviter de nombreux cas.
Vous devez vous connecter pour publier un commentaire.
Comme une méthode formelle paramètre est une variable locale, vous pouvez y accéder depuis le centre-anonyme classes que si elles sont déclarées comme final.
Cela vous évite de déclarer un autre local de la finale de la variable dans le corps de la méthode:
Extrait de Le dernier mot sur le mot-clé final
La finale vous empêche d'affecter une nouvelle valeur à la variable, et cela peut être utile dans la détection de fautes de frappe. Du point de vue stylistique que vous aimeriez conserver les paramètres reçus inchangé et affecter uniquement pour les variables locales, alors au final serait de les aider à faire valoir ce que de style.
Dois avouer que j'ai rarement souvenez-vous de l'utilisation finale pour les paramètres, je devrais peut-être.
Il ne fait pas beaucoup de différence. Il signifie simplement que vous ne pouvez pas écrire:
mais vous pouvez toujours écrire:
C'est surtout une allusion à l'entretien programmeur qui suit vous que vous n'allez pas affecter une nouvelle valeur pour le paramètre quelque part dans le milieu de votre méthode où il n'est pas évident, et donc susceptible de causer de la confusion.
Le mot-clé final lorsqu'il est utilisé pour les paramètres et les variables en Java marques de référence comme définitive. En cas de passage d'un objet à l'autre méthode, le système crée une copie de la variable de référence et le transmet à la méthode. En marquant les nouvelles références final, vous protéger de la réaffectation. Il est parfois considéré comme une bonne pratique de codage.
Pour le corps de cette méthode, le
final
mot-clé permettra d'éviter l'argument des références à être accidentellement réaffectés donne une erreur de compilation sur ces cas (la plupart des IDEs va se plaindre tout de suite). Certains pourraient faire valoir que l'utilisation definal
en général, chaque fois que possible permettra d'accélérer les choses mais ce n'est pas le cas dans les machines virtuelles.C'est juste une construction en Java qui vous permettra de définir un contrat et de le respecter. Une discussion similaire ici : http://c2.com/cgi/wiki?JavaFinalConsideredEvil
BTW - (comme le twiki dit), marquage args comme finale est généralement redondants si vous suivez les bons principes de programmation et de la hance fait réaffecter /redéfinition de l'argument entrant référence.
Dans le pire des cas, si vous n'redéfinir les arguments de référence, sa ne va pas compromettre la mise en valeur passée à la fonction depuis seulement une référence a été adoptée.
Je parle de marquage variables et les champs finale en général - ne s'applique pas seulement à des arguments de méthode. (Méthodes de marquage/classes finale est une chose tout à fait différent).
C'est une faveur pour les lecteurs/futurs responsables de votre code. Avec un bon nom de la variable, c'est utile et rassurant pour le lecteur de votre code pour voir/comprendre ce que les variables en question ne représentent - et c'est rassurant pour le lecteur que chaque fois que vous voyez la variable dans la même portée, la signification reste la même, de sorte (s), il n'a pas à se gratter la tête pour toujours comprendre ce qu'est une variable signifie que dans chaque contexte. Nous avons vu trop d'abus de la "réutilisation" des variables, qui fait même un court extrait de code difficile à comprendre.
- Dans le passé (avant Java 8 🙂 )
Explit utilisation de la "finale" de mots clés affectés à l'accessibilité de la méthode de la variable interne anonyme classes.
- Modernes (Java 8+) lanaguage il n'est pas nécessaire pour une telle utilisation:
Java introduit "effectivement finale" des variables. Les variables locales et la méthode paramétrée sont assummed final si le code n'implique pas l'évolution de la valeur de la variable. Donc, si vous voyez ce mot-clé dans Java8+ vous pouvez supposer qu'il est inutile. Introduction de "efficacement final" qui nous rend de type de moins de code lors de l'utilisation des expressions lambda.
Le mot-clé final vous empêche d'affecter une nouvelle valeur pour le paramètre. Je tiens à expliquer avec un exemple simple
Supposons que nous avons une méthode
Dans le cas ci-dessus, si le "dateOfBirth" est attribué une valeur nouvelle dans method2 que cela aurait pour conséquence la mauvaise sortie de method3. Comme la valeur est passée à method3 n'est pas ce qu'il était avant d'être transmis à method2. Donc, pour éviter ce mot-clé final est utilisé pour les paramètres.
Et c'est aussi l'un de la Java des Meilleures Pratiques.