在Effective Java(第三版)的第56项中,Joshua Bloch指出:"公共类不应该使用默认构造函数,因为无法为它们提供文档注释。"
默认的构造函数不会做任何意外的事情,但它只是创建一个新实例。什么样的信息应该记录在关于无参数构造函数的文档注释中,而这些构造函数不应该只存在于类注释中?
如果一个类在初始化程序块中有令人感兴趣的行为(因为否则没有文档注释这些),或者甚至是字段的非标准值赋值(可能调用获取初始值的方法),我可以理解这样做。但似乎对于大多数课程而言,这并没有增加太多。我有什么遗失的吗?
答案 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。