为什么使用 javadoc 无参数构造函数?

Tom*_*sky 5 java default-constructor effective-java

在《Effective Java》(第三版)第 56 条中,Joshua Bloch 指出:“公共类不应该使用默认构造函数,因为没有办法为它们提供文档注释。”

默认构造函数不会做任何意外的事情,但它只是创建一个新实例。什么样的信息应该记录在无参数构造函数的文档注释中,而这些信息不应该只存在于类注释中?

如果一个类在初始化块中具有有趣的行为(因为否则没有地方可以对它们进行注释),或者甚至是字段的非标准值分配(可能调用方法来获取初始值),我可以理解这样做。但对于大多数课程来说,这似乎并没有增加太多。我有什么遗漏的吗?

dav*_*xxx 5

在大多数情况下你是对的。
我认为在这些情况下,使用默认构造函数是有意义的,因为您没有任何可记录的内容。

现在,在其他一些情况下,记录该方法的功能(更具体地说是其默认状态)非常有用。

因为即使默认构造函数有一个空的主体,它也可能在其字段中使用默认值,这可能是值得记录的。

以下是 JDK 类的两个示例,其中 javadoc 可以为具有空主体的构造函数提供有用的信息。

/**
 * Creates an empty Stack.
 */
public Stack() {
}
Run Code Online (Sandbox Code Playgroud)

当然,客户可能会在调用此构造函数时猜测堆栈是空的,但明确指定它会更好。

原子整数

AtomicInteger空​​的构造函数:

/**
 * Creates a new AtomicInteger with initial value {@code 0}.
 */
public AtomicInteger() {
}
Run Code Online (Sandbox Code Playgroud)

构造函数AtomicInteger 已重载。所以我们不属于潜在的默认构造函数的情况。
但无论如何,它是一个空参数构造函数,主体为空,类似于默认构造函数生成的内容。

如果没有这些构造函数 javadoc,这些类的客户端应该查看实现来猜测信息,而限制客户端查看实现以了解其规范的 API 并不是一个设计良好的 API。