Est-ce une variable finale adoptée en Java dernier séjour de l'autre côté?
-
21-09-2019 - |
Question
Je viens dans un code qui me un peu déroutant; il y a vraiment deux variantes que je voudrais préciser.
Exemple 1:
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file.getAbsolutePath();
}
Quel serait le but de déclarer file
« final
»? Étant donné que les primitives Java sont passés par valeur, et getAbsolutePath()
est juste un retour String
, la variable ne sera pas final
de l'autre côté (méthode d'appel), il sera? Et puisque la variable file
existe uniquement dans le cadre de ces 2 lignes, je ne vois vraiment aucune fin du mot-clé final
. Y at-il quelque chose que je suis absent? Quelqu'un voit-il une raison de le faire?
Exemple 2:
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file;
}
Comme ici l'objet réel est retourné ... Est-ce que cela signifie la variable file
sera constante / final
de l'autre côté ...? Il ne semble pas logique.
En général, il me semble que vous passez une variable, sans il est le type d'accès. Comme dans, je peux avoir une variable private
dans une fonction avec une fonction public
get qu'elle retourne - mais la variable qu'il reçoit en appelant la fonction doit spécifier un modificateur d'accès. Donc, si elle spécifie public
, la variable retournée sera public
dans ce cadre. Si elle précise private
, la variable retournée sera private
dans ce cadre. Y at-il une différence avec final
? La « constance » d'une chose variable qui peut être passé? Cela me paraît assez improbable, compte tenu de ce que je sais de Java.
Ou suis-je manque le point tout à fait et il y a un autre but du mot-clé final
dans le code ci-dessus?
Modifier
J'ai vérifié avec le développeur original qui a écrit le code, et il a dit qu'il ne mettre le mot-clé dans final
parce qu'il avait pensé à l'origine de la méthode serait beaucoup plus et je voulais faire en sorte que le dossier est resté tout au long constant. Il a également dit qu'il déclare généralement des variables qui ne devraient pas être modifiés comme final
, en règle générale dans tous les domaines et une sorte de principe sur un point - que les deux réponses ci-dessous mentionnées. Il semble donc que je lisais trop en simple mot-clé supplémentaire inclus pour des raisons de normes. Merci à tous!
La solution
Certaines personnes pourraient vous dire qu'il ya un avantage de performance à l'utilisation finale, mais qui est, en aucun cas, prouvé de façon concluante.
Le principal avantage du mot-clé final
est pour le programmeur pour indiquer qu'une classe, une méthode ou d'un champ ne doivent pas être modifiés.
Gardez à l'esprit que la déclaration d'une final
variable ne fait pas l'objet référencé immuable. Cela signifie simplement que la variable ne peut pas avoir la valeur de ce réaffecté. Vous pouvez toujours exécuter des méthodes de la file
variable qui pourrait changer de l'intérieur l'objet File
.
Dans les deux méthodes que vous donnez, je vois pas de valeur pour faire la file
variable final
. Certaines conventions de code avocat faisant tous final
variable, sauf si la nécessité d'être modifié. Certaines personnes ne souscrivent pas à cela. Je considère qu'il est une variation sur le principe de précaution .
Autres conseils
final
dans ce cas signifie simplement que le file
de référence locale sera immuable. Il n'a pas de sens en dehors de la méthode. Certaines conventions de codage avocat ayant toutes les variables finales à moins qu'ils doivent être mutable et vous verrez le code comme ça quand quelqu'un suit ces lignes directrices.