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.