我应该如何注释一个类在Java中是不可变的?


14

最近,我偶然发现了不可变对象的实用性,例如,如果将元素传递给构造函数并且类应该是不可变的,那么如果它们本身不是不可变的,则必须复制这些元素。

这需要对我的项目进行大量检查或了解,因为如果我有

public A(B foo)

而且B不是一成不变的,A我必须复制B。现在想象一下B似乎是不变的,但是它本身在构造函数中具有可变的类,依此类推。

如果类在Java中是不可变的,是否有记录的标准或最佳实践?看来@immutableJavadoc中没有关键字。

@Immutable注解似乎有什么东西对汽车类生成完全不同的,而不是标准的Java的一部分。


2
首先,防御性复制使您可以解决此问题。其次,记录它的方法是该类Javadoc
raptortech97

“记录它的方法是Javadoc类”是否有标准方法可以做到这一点?那么这将是已经被接受的答案。
Aufziehvogel 2015年

@ raptortech97不变类的主要优点之一是不需要防御性复制。如果必须对所谓的不可变对象进行防御性复制,那么您做错了。
itsbruce 2015年

1
@itsbruce他正在谈论复制可变对象。另外,复制不变对象的原因之一是缓存位置。一些垃圾收集器会保留对象的相对顺序,因此分配在一起的对象会保持在一起。
2015年

你是对的。我的错。
itsbruce 2015年

Answers:


7

查看String该类的文档(粗体是我做的):

String类表示字符串。Java程序中的所有字符串文字(例如“ abc”)都实现为此类的实例。 字符串是常量;它们的值创建后无法更改。字符串缓冲区支持可变字符串。由于String对象是不可变的,因此可以共享它们。

如您所见,没有特定的标签或其他标记,但是,它们确实在描述类的JavaDoc中指定了String该类表示一个不变的,不变的对象。

因此,假设您已按照 Oracle教程中提供的说明创建了一个不可变的类,以确保记录了该类的不可变性,则应确保在JavaDoc中提到了描述该类及其内容的内容。做。

如果仍然不能满足您的需求,您可以在此处查看如何构建自定义JavaDoc标签。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.