Come devo annotare che una classe è immutabile in Java?


14

Di recente mi sono imbattuto nell'utilità di oggetti immutabili e che, ad esempio, se passi elementi a un costruttore e la tua classe dovrebbe essere immutabile, devi copiarli se non sono immutabili.

Ciò richiede un sacco di controlli o conoscenze sul mio progetto, perché se ne ho

public A(B foo)

e Bnon è immutabile, Adovrei copiarlo B. Ora immagina di Bsembrare immutabile, ma ha classi mutabili nel costruttore e così via.

Esiste uno standard o best practice per documentare se una classe è immutabile in Java? Sembra che non ci sia una @immutableparola chiave in Javadoc.

L' annotazione @Immutable sembra essere qualcosa di completamente diverso per la generazione automatica di classi e non fa parte di Java standard.


2
Innanzitutto, la copia difensiva ti consente di aggirare il problema. In secondo luogo, il modo per documentarlo è la classe Javadoc
raptortech97,

"il modo per documentarlo è la classe Javadoc" Esiste un modo standard per farlo? Quindi questa sarebbe già la risposta accettata.
Aufziehvogel,

@ raptortech97 Uno dei maggiori vantaggi delle classi immutabili è che non è necessario eseguire copie difensive. Se ci deve essere una copia difensiva di un oggetto presumibilmente immutabile, lo stai sbagliando.
itsbruce,

1
@itsbruce Stava parlando della copia di oggetti mutabili. Inoltre, c'è un motivo per copiare un oggetto immutabile: la localizzazione della cache. Alcuni garbage collector conservano il relativo ordinamento degli oggetti, quindi gli oggetti allocati insieme rimangono uniti.
Doval,

Hai ragione. Colpa mia.
itsbruce,

Risposte:


7

Guardando la documentazione della Stringclasse (il grassetto è qualcosa che ho fatto):

La classe String rappresenta stringhe di caratteri. Tutti i valori letterali di stringa nei programmi Java, come "abc", sono implementati come istanze di questa classe. Le stringhe sono costanti; i loro valori non possono essere modificati dopo la loro creazione. I buffer di stringhe supportano stringhe mutabili. Poiché gli oggetti String sono immutabili, possono essere condivisi.

Come puoi vedere, non esistono etichette particolari o altri marcatori, tuttavia specificano in JavaDoc che descrive la classe che la Stringclasse rappresenta un oggetto costante e immutabile.

Quindi, supponendo che tu abbia seguito le istruzioni fornite in questo tutorial Oracle per creare una classe immutabile, per assicurarti che l'immutabilità della classe sia documentata, devi solo assicurarti di menzionare in esso il JavaDoc che descrive la classe e cosa lo fa.

Se ciò non soddisfa ancora ciò di cui hai bisogno, puoi dare un'occhiata a come creare tag JavaDoc personalizzati qui .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.