J'ai récemment trébuché sur la manière dont les objets immuables utiles sont et que par exemple. Si vous passez des éléments à un constructeur et que votre classe doit être immuable, vous devez copier ces éléments si elles ne sont pas immuables elles-mêmes.
Cela nécessite beaucoup de vérification ou de connaissance de mon projet, car si j'ai
public A(B foo)
et B
n'est pas immuable, A
je devrais copier B
. Maintenant, imaginez B
semble immuable, mais elle a elle-même des classes mutables dans le constructeur, etc.
Existe-t-il une norme ou une meilleure pratique pour documenter si une classe est immuable en Java? Il semble qu'il n'y ait pas @immutable
Mot-clé à Javadoc.
Le @ Annotation immuable semble être quelque chose de totalement différent pour la génération de la classe Auto et ne partie de Java standard.
En regardant la documentation de la catégorie String
(texte en gras est quelque chose que j'ai fait):
La classe de cordes représente des chaînes de caractères. Tous les littéraux de chaîne In Java programmes, tels que "ABC", sont implémentés comme des instances de cette classe. Les chaînes sont constantes; leurs valeurs ne peuvent pas être changées après leur sont créés. Les tampons de chaîne supportnent des chaînes mutables. Parce que les objets de chaîne sont immuables, ils peuvent être partagés.
Comme vous pouvez le constater, il n'y a pas d'étiquetage particulier ou d'autres marqueurs, cependant, ils spécifient dans le Javadoc décrivant la classe que la classe String
représente un objet constant et immuable.
Ainsi, en supposant que vous avez suivi les instructions fournies dans Ceci Oracle Tutorial pour créer une classe immuable, assurez-vous que l'immuabilité de la classe est documentée, vous devez simplement vous assurer de le mentionner dans le Javadoc décrivant la classe et ce qu'il fait.
Si cela ne convient toujours pas à ce dont vous avez besoin, vous pouvez regarder comment vous pouvez créer des balises Javadoc personnalisées ici .
Vous pouvez utiliser des annotations:
@ javax.annotation.concurrent.immutable de JSR-305
ou @ net.jcip.annotations.Imbutable de Java Concurrence dans la pratique