在java.util.LinkedList
类中,有定义的、默认的和参数化的两个接受集合的构造函数。当我查看实现时,我看到参数化的构造函数有this()
,基本上是调用默认构造函数。
但是默认构造函数是空的。所以我只是好奇这是否是调用默认构造函数的最佳实践,即使它是空的,或者这背后有任何原因。如果不调用默认构造函数会发生什么?
GrepCode LinkedList实现
如果默认构造函数在将来的任何时候被扩展,则其他构造函数不必被更改。
它告诉我们,扩展构造函数基本上是一个默认构造函数,但是增加了一些特殊的功能(为了方便)。这意味着任何形式的LinkedList
初始化必须先执行默认初始化步骤。
这可能看起来很奇怪,因为目前没有默认的初始化步骤(但以后可能会出现)。
这并不是一个公认的好做法。可能默认构造函数在以前的版本中做了一些事情。也许开发人员认为这是个好主意,所以如果在默认构造函数中做了一些额外的事情,它也会在另一个构造函数中完成。如果你看一下ArrayList,你会发现它做了一个不同的选择。
如果不调用默认构造函数会发生什么?
不调用默认构造函数。父类无参数构造函数被隐式调用。
参数化版本应该以与未参数化版本相同的方式创建列表,并调用一个方法来额外添加元素。默认构造函数为空的事实是特定于实现的。
/**
* Constructs an empty list.
*/
public LinkedList() {
}