2013-07-27 17 views
1

任何人能解釋這這行代碼是如何工作的:如何嵌套的方法調用工作

Rational sum = a.add(b).add(c);

我不知道如何對象B(這是一個參數)被接收的方法?

+1

查找「方法鏈」。而對象b沒有收到方法。它被作爲參數傳遞給一個方法。 –

回答

4

這叫做method chaining。方法add()實際上返回當前修改對象的引用或者調用該方法的同一類型的新對象。假設a所指的對象是BigInteger,當您調用a.add(b)時,它會返回一個BigInteger對象,其值爲a+b,因此您可以再次調用該對象的.add(c)

Rational sum = a.add(b).add(c); 
// is equivalent to 
Rational temp = a.add(b); 
Rational sum = temp.add(c); 

方法鏈不是必需的。它只會潛在地提高可讀性並減少源代碼的數量。這是建立fluent interface背後的核心概念。

樣本圖解:

enter image description here

這種做法大多采用在Builder pattern,您可以在StringBuilder類找到API本身這種模式。

我不明白對象b(哪個是參數)如何接收方法?

沒有你的理解是錯誤的,a.add(b)意味着您在對象a調用方法add()和傳遞對象b的參考。方法a.add(b)返回的結果對象與a類型相同,然後在返回的對象上調用方法.add(c),將對象c的引用傳遞給該方法。

+0

JLS,編譯器或語言設置的鏈接深度是否存在技術限制? – hexafraction

+0

@hexafraction我不知道任何,需要研究。 – NINCOMPOOP

+1

確實存在*可懂度*限制! –

1

Its fluent chaining

鏈中的每一方法必須返回一個類或一個接口。鏈中的下一個方法必須是返回類的一部分。

你的情況 a.add(b)返回一些CALSS /接口,然後調用上 add(c)

和方法返回的sum

相關問題