2011-12-29 20 views
3
之間的「點」

我看到下面的代碼語法。調用一個接一個地調用java方法,在

ConfigurationBuilder cb = new ConfigurationBuilder(); 

cb.setDebugEnabled(true) 
    .setOAuthConsumerKey("x11") 
    .setOAuthConsumerSecret("x33") 
    .setOAuthAccessToken("x55") 
    .setOAuthAccessTokenSecret("x66"); 

所有方法在彼此之後而不使用對象實例。 當我想要使用這種調用方法時,如何在編寫自己的類時工作?

回答

6

使每個這些方法返回調用它們在同一個對象:

class MyClass{ 
    public MyClass f(){ 
     //do stuff 
     return this; 
    } 
} 

這是一個相當常見的模式。你有沒有見過這個C++?

int number=654; 
cout<<"this string and a number: "<<number<<endl; 

操作< <的每個調用返回作爲參數傳遞的相同的ostream,所以在這種情況下,COUT,由於此操作完成從左到右,它正確的字符串後打印數量。

+0

我還是無法把頭圍住......你能給我們一個更好的例子嗎?如果我給了你一個github鏈接,你可以告訴我使用自定義對象完成後的樣子嗎? – 2017-04-17 19:15:16

0

這類似於設計模式的Builder

Here你可以找到一個很好的例子,它的靈感來自於Josh Bloch的代碼Effective Java 2nd ed。

+0

我不認爲這是構建器設計模式的一個實例。事實上,我不認爲這是一種設計模式。這只是編寫代碼的一種可愛的聰明方式。 – 2011-12-29 08:46:50

+0

是的,但建設者模式利用這種可愛的聰明屁股的代碼寫作方式。 – 2011-12-29 08:48:08

2

書寫代碼風格被稱爲「流暢」,這是相同的:

cb.setDebugEnabled(true); 
cb.setOAuthConsumerKey("x11"); 
cb.setOAuthConsumerSecret("x33"); 
cb.setOAuthAccessToken("x55"); 
cb.setOAuthAccessTokenSecret("x66"); 

每種方法,以適應這種風格返回「本」。

如果您使用這種風格,準備在調試代碼時遇到一些不便之處,因爲如果您只想單步執行其中的一種方法而不是其中的每一種,調試器可能不一定給你選擇這樣做。

相關問題