3

查看 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);
    }
4

2 回答 2

2

这称为构造函数链接。它是一种机制,使对象能够从它们最通用的超类Object( .

构造函数可以选择在运行之前调用当前类(用 表示this)或父类(用 表示)的哪个其他构造函数。super默认链接选项是 (implicitly) super(),除非指定了其他内容(或者如果父类中的无参数构造函数不可见)。

在您的情况下,this()意味着构造函数LinkedList(Collection<? extends E> c)将首先调用LinkedList()构造函数。虽然在您的代码段中它无操作的,但它的存在确保无参数构造函数的初始化策略中的任何更改也将被另一个采用。因此,它使更改类的初始化逻辑更不容易出错。

于 2013-09-29T18:56:07.973 回答
0

在 Java 语言中,如果您公开默认构造函数以外的构造函数,则默认构造函数将消失。您可以放置​​显式默认构造函数。如果需要存在显式默认构造函数以及非默认构造函数this(),则应将其放置在构造函数中。

于 2013-09-29T19:24:09.400 回答