115 votes

Rendre les arguments de la méthode java définitifs

Quelle différence que final fait entre le code ci-dessous. Y a-t-il un avantage à déclarer les arguments comme final.

public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){  
    return ....
}

public String changeTimezone(final Timestamp stamp, final Timezone fTz, 
        final Timezone toTz){
    return ....
}

145voto

PeterMmm Points 11099

Comme un paramètre de méthode formel est une variable locale, vous pouvez y accéder à partir de classes anonymes internes uniquement si elles sont déclarées comme finales.

Cela vous évite de déclarer une autre variable finale locale dans le corps de la méthode :

 void m(final int param) {
        new Thread(new Runnable() {
            public void run() {
                System.err.println(param);
            }
        }).start();
    }

41voto

djna Points 34761

La finale vous empêche d'assigner une nouvelle valeur à la variable, ce qui peut être utile pour attraper des fautes de frappe. Stylistiquement, vous voudrez peut-être garder les paramètres reçus inchangés et ne les assigner qu'aux variables locales, donc final aiderait à appliquer ce style.

Je dois admettre que je me souviens rarement d'utiliser final pour les paramètres, peut-être que je devrais.

public int example(final int basicRate){
    int discountRate;

    discountRate = basicRate - 10;
    // ... lots of code here 
    if ( isGoldCustomer ) {
        basicRate--;  // typo, we intended to say discountRate--, final catches this
    }
    // ... more code here

    return discountRate;
}

14voto

Adrian Pronk Points 5810

Ça ne fait pas beaucoup de différence. Cela signifie simplement que vous ne pouvez pas écrire :

stamp = null;
fTz = new ...;

mais vous pouvez encore écrire :

stamp.setXXX(...);
fTz.setXXX(...);

C'est principalement un indice pour le programmeur de maintenance qui vous suit que vous n'allez pas attribuer une nouvelle valeur au paramètre quelque part au milieu de votre méthode où ce n'est pas évident et pourrait donc causer de la confusion.

4voto

Sid Points 1453

Le mot-clé final lorsqu'il est utilisé pour les paramètres/variables en Java marque la référence comme finale. En cas de passage d'un objet à une autre méthode, le système crée une copie de la variable de référence et la passe à la méthode. En marquant les nouvelles références finales, vous les protégez de la réaffectation. C'est parfois considéré comme une bonne pratique de codage.

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