2014-12-31 24 views
1

我閱讀和段落「在Java編程思想」裏this關鍵字進行了說明,例如如何理解什麼方法時,「返回這個」正在恢復使用

public class Leaf { 
    int i = 0; 
    Leaf increment() { 
     i++; 
     return this; 
    } 
    void print() { 
     System.out.println("i = " + i); 
    } 
    public static void main(String[] args) { 
     Leaf x = new Leaf(); 
     x.increment().increment().increment().print(); 
    } 
} 

下面筆者使用我不知道是什麼,如何瞭解increment()方法返回的內容?作者解釋說,它返回對當前對象的引用。這是否意味着x.increment()聲明返回一種x(我知道什麼是參考意思)?並在執行第一個x.increment()後開始對賬單x.increment().increment().increment().print();,成爲x.increment().increment().print();

這聽起來符合邏輯,但我不確定是否理解正確。

+2

它返回當前實例。當您構造一個對象並從中調用該方法時,它將返回您正在調用方法的對象,從而允許您調用更多方法 –

+0

請記住,「當前對象」可能是「Leaf」的一個子類。所以在這種情況下,它返回一個'Leaf',但通常它返回一個'Leaf'或'Leaf'的子類(注意'Leaf'不是'final'類)。 – markspace

+0

http://en.wikipedia.org/wiki/Method_chaining – Sirko

回答

1

increment()方法簽名爲

Leaf increment() 

它說,它返回一個Leaf實例。

return this表示返回被調用的Leaf類的實例(在您的情況下,它被稱爲x)。

x.increment().increment().increment().print(); 

相同

x.increment(); 
x.increment(); 
x.increment(); 
x.print(); 
2

return this回報當前實例,如果你想保持將更改應用到它這是相當方便。

JDK的一個很好的例子是StringBuilder。例如,這個代碼沒有問題:

StringBuilder builder = new StringBuilder(); 
builder.append("welcome"); 
builder.append("to"); 
builder.append("StackOverflow"); 

但是,這看起來好多了嗎?

StringBuilder builder = new StringBuilder().append("welcome").append("to").append("StackOverflow"); 
+0

在我看來,它看起來最好是一個帶有換行符的聲明。 –

+1

關於[方法鏈接](https://en.wikipedia.org/wiki/Method_chaining)的一個很好的資源可以在[here]找到(http://www.drdobbs.com/jvm/creating-and-destroying-java -objects面值/ 208403883?PGNO = 2)。 – Daniel

+0

@丹尼爾 - 感謝您的鏈接。我閱讀槽,它聽起來對我來說是正確的,但我還不知道,技術上如何命名 – FlenMK

1

可以形象化this爲包含於在其上執行所述方法的實例的引用一個隱藏的參數。要知道每次執行都包含什麼this,您必須查看將該方法與實例分開的點左側的內容。

相關問題