I parametri del metodo Java non dovrebbero essere sempre definitivi [chiuso]

-1

Dire che ho un metodo che scrive una stringa in un file:

public void write(String content, File out) {
    // writes content to out
}

Se voglio proteggere i parametri e assicurarmi che non vengano riassegnati a un nuovo valore all'interno di questo metodo write , posso usare la parola chiave final per evitare che ciò accada:

public void write(final String content, final File out) {
    // writes content to out
}

Da quello che so di best practice (e questo utile domanda  qui), questa è una buona cosa - in quanto non è un comportamento chiaro se un metodo modifica ciò che è stato dato. Tuttavia, capisco ancora che a volte avremo bisogno di fare questo e quindi la funzionalità dovrebbe essere integrata in Java per consentire questo.

La mia domanda è, perché devo dichiarare esplicitamente che un parametro è final e non il contrario? Perché non tutti i parametri del metodo (o anche tutti i parametri?) Sono implicitamente final - e devo usare una nuova parola chiave Java (ad esempio unstable ) per essere in grado di modificare un parametro in modo esplicito.

public String write(unstable String content, File out) {
    // writes content to out
    ...
    // then for some mad reason, this happens
    content = "Done";
    return content;
}

Questo potrebbe essere passato lungo il Javadoc in modo che un chiamante possa sapere esplicitamente che una variabile che stanno fornendo non è sicura e verrà modificata.

    
posta Rossiar 01.05.2016 - 09:17
fonte

1 risposta

6

Sembra che tu sia sotto l'idea sbagliata che quando content viene modificata all'interno di write , tale modifica è visibile al chiamante.

Non lo è.

È quando scrivi alle proprietà su di esso che tali modifiche sono visibili al chiamante, ma final non protegge in alcun modo da ciò.

    
risposta data 01.05.2016 - 11:15
fonte

Leggi altre domande sui tag