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!

Était-ce utile?

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.

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