Provengo da uno sfondo C++ e attualmente sto imparando Java. Una domanda è sorto quando ho provato a utilizzare alcune librerie di terze parti. Come determinare se la chiamata a un metodo che utilizza un riferimento oggetto come parametro modifica l'oggetto? In C++ questo è chiaro grazie all'uso della parola chiave const. Se la firma del metodo è:Come determinare se un metodo Java modifica un oggetto passato come parametro
void foo(Boo& boo);
So che l'oggetto si fa riferimento potrebbe essere modificato, mentre se la firma del metodo è:
void foo(const Boo& boo);
Le garanzie compilatore che l'oggetto di riferimento non viene modificato.
Non ho visto qualcosa di analogo in Java, in quanto solo il riferimento stesso può essere dichiarato definitivo, non l'oggetto di riferimento e un argomento finale non ha molto senso in primo luogo poiché viene comunque passato per valore . Perciò, quando vedo un metodo come:
void foo(Boo boo) {...}
Come faccio a determinare se l'oggetto a cui fa riferimento boo viene modificato all'interno del corpo della funzione (magari usando le annotazioni)? Se non c'è modo di sapere, c'è qualche convenzione ampiamente utilizzata o alcune buone pratiche per evitare confusione e bug?
Leggi i documenti. (Si potrebbe considerare questo un punto debole in Java rispetto a C++, ma non ci manca davvero, non più di quanto non abbiate controllato le eccezioni quando si lavora in C++.) – user2357112
La migliore pratica è quella di evitare la mutazione laddove possibile. Questo vale per tutto, non solo per gli argomenti ai metodi. – usr
@ user2357112 "* più di quanto non abbiate controllato le eccezioni quando si lavora in C++" * L'uso di eccezioni per controllare il flusso del programma è un errore, eccezioni sono (come dice il nome) per ** circostanze eccezionali **. Avere una funzione linguistica il cui unico scopo è quello di essere in grado di recuperare da un errore utilizzando eccezioni in quanto il canale di comunicazione è solo un altro caso di "eccezioni per il controllo del flusso", un errore di progettazione come afferma la regola precedente. Non perdiamo le eccezioni controllate. – Manu343726