为什么选择javadoc无参数构造函数?

时间:2018-03-19 20:08:15

标签: java default-constructor effective-java

在Effective Java(第三版)的第56项中,Joshua Bloch指出:"公共类不应该使用默认构造函数,因为无法为它们提供文档注释。"

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

如果一个类在初始化程序块中有令人感兴趣的行为(因为否则没有文档注释这些),或者甚至是字段的非标准值赋值(可能调用获取初始值的方法),我可以理解这样做。但似乎对于大多数课程而言,这并没有增加太多。我有什么遗失的吗?

1 个答案:

答案 0 :(得分:2)

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

现在在其他一些情况下,记录方法的作用,更具体地说是默认状态是很有用的。

因为即使默认构造函数有一个空体,它也可能在其字段中使用可能对文档感兴趣的默认值。

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

<强>堆栈

/**
 * Creates an empty Stack.
 */
public Stack() {
}

当然,客户端可能会猜测Stack是空的,因为这个构造函数被调用但是明确指定它更好。

<强>的AtomicInteger

AtomicInteger空构造函数:

/**
 * Creates a new AtomicInteger with initial value {@code 0}.
 */
public AtomicInteger() {
}

AtomicInteger构造函数已重载。所以我们不是潜在的默认构造函数 但无论如何,它是一个空的arg构造函数,具有一个空体,类似于默认构造函数生成的。

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