看着
Linkedlist.java
,我观察到一个重载的构造函数,其中一个包含一个空的 this()
。
一般来说,我在默认参数下看到过这个。没有参数的this()
有什么用?
/**
* Constructs an empty list.
*/
public LinkedList() {
}
/**
* Constructs a list containing the elements of the specified
* collection, in the order they are returned by the collection's
* iterator.
*
* @param c the collection whose elements are to be placed into this list
* @throws NullPointerException if the specified collection is null
*/
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
这称为构造函数链。这种机制使对象能够从最通用的超类 (
Object
) 的构造函数开始初始化,然后向下移动到更具体的构造函数(每个级别将新对象初始化为其类的有效状态,然后再继续下一个)。
构造函数可以选择在运行此构造函数之前调用当前类(由
this
表示)或父类(由 super
表示)的其他构造函数。默认链接选项是(隐式)super()
,除非指定了其他内容(或者父类中的无参数构造函数不可见)。
在您的情况下,
this()
意味着构造函数LinkedList(Collection<? extends E> c)
将首先调用LinkedList()
构造函数。虽然在您的代码片段中它是一个无操作,但它的存在确保无参数构造函数的初始化策略中的任何更改也将被另一个构造函数采用。因此,它使得更改类的初始化逻辑不太容易出错。
this()
放置在构造函数中。