2013-09-29 68 views
3

看着Linkedlist.java,我觀察到重載的構造函數,其中一個包含一個空的this()。 通常我已經看到這與默認參數。這個()沒有參數的用法是什麼?在linkedlist.java中使用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); 
    } 
+1

這是一個沒有參數的構造函數的調用,在這種情況下是no-op。 –

+0

在這種情況下不需要。 –

+0

我需要它。 –

回答

2

這就是所謂的構造函數鏈。它是使對象能夠從其最普通的超類(Object)的構造函數開始初始化並且向下移動到更具體的對象(每個級別在將新對象初始化爲其類的有效狀態之前轉到下一個類)。

構造函數可以在運行此構造函數之前調用當前類的其他構造函數(表示爲this)或父類(表示爲super)。默認鏈接選項是(隱含地)super(),除非指定了其他內容(或者父類中的無參數構造函數不可見)。

對你而言,this()意味着構造函數LinkedList(Collection<? extends E> c)將首先調用LinkedList()構造函數。在你的代碼片段中,的一個no-op,它的存在確保了無參數構造函數的初始化策略的任何變化也將被另一個採用。所以它使得類的初始化邏輯更容易出錯。

+0

是的,但(this())在linkedlist.java中的作用是什麼?它看起來像一個不可操作的版本 – JavaDeveloper

+4

它提供了可維護性:將來如果添加了一些屬性,它們可能會在某處被初始化。初始化它們的地方是默認的構造函數LinkedList()。通過今天把一個沒有操作的鏈接,我們保持了這個班級在未來的連貫性。 – Aubin

+0

@JavaDeveloper我剛剛編輯。這基本上就是奧賓剛纔說的。 –

0

在Java語言中,如果公開除默認構造函數以外的構造函數,則默認構造函數正在消失。你可以放置顯式的默認構造函數。如果需要顯式默認構造函數的存在以及非默認構造函數this()應該放置在構造函數中。