2015-09-04 97 views
1

有沒有這個技術名稱(方法調用返回的對象上的另一個方法調用是在同一行上)?你叫什麼?

String pAID = commonAssets.getApplicationServerSettings().getSetting("plivoAuthID"); 

代替

ApplicationServerSettings applicationServerSettings = commonAssets.getApplicationServerSettings(); 
String pAID = applicationServerSettings.getSetting("plivoAuthID"); 

此外,當我做的第一,Eclipse不提示我導入類ApplicationServerSettings,但它如果我使用第二代碼風格。

另外,這兩種風格僅僅是偏好嗎?

+0

在不同的字符串上放置不同的呼叫,例如,放置'.getSetting(「plivoAuthID」);'在另一個字符串上(能夠理解崩潰報告) –

回答

7

該技術被稱爲method chaining。從維基

String pAID = commonAssets.getApplicationServerSettings().getSetting("plivoAuthID"); 

定義:

方法鏈,也被稱爲命名參數成語,是用於調用在面向對象 編程語言多個方法調用的公共 語法。每種方法都會返回一個對象,允許在一條語句中將 調用鏈接在一起,而不需要 變量來存儲中間結果。[1]局部變量 聲明是語法糖,因爲人類難以深度嵌套方法調用 。[2] [3]一個方法鏈也被稱爲 火車殘骸,因爲在同一行中出現的方法數量增加了,因爲更多的方法連接在一起[0121],即使經常在 方法。

你的第二個問題:

此外,當我做的第一,Eclipse不提示我導入類ApplicationServerSettings,但它如果我使用第二代碼風格。

  • 從定義再次「每個方法返回一個對象,允許呼叫在單個語句中被鏈接在一起,而不需要變量來存儲中間結果。」這就是爲什麼它不會提示您導入類ApplicationServerSettings

另一個例子(除了想您介紹),看起來簡單:

看看維基例如:

class Person { 
    private String name; 
    private int age; 

    // In addition to having the side-effect of setting the attributes in question, 
    // the setters return "this" (the current Person object) to allow for further chained method calls. 

    public Person setName(String name) { 
     this.name = name; 
     return this; 
    } 

    public Person setAge(int age) { 
     this.age = age; 
     return this; 
    } 

    public void introduce() { 
     System.out.println("Hello, my name is " + name + " and I am " + age + " years old."); 
    } 

    // Usage: 
    public static void main(String[] args) { 
     Person person = new Person(); 
     // Output: Hello, my name is Peter and I am 21 years old. 
     person.setName("Peter").setAge(21).introduce(); 
    } 
} 
+0

爲什麼downvote? –

+0

這不是正確鏈接的方法 –

+1

我糾正!根據你的報價,這確實符合描述。我以前從來沒有用過這句話。我把我的失望變成了贊成。 – Rainbolt

1

它通常被稱爲流利的語法

恕我直言,這是一個風格問題,沒有對錯。

流利的語法更加簡潔,這有時是件好事。

另一個變體對於源代碼級調試更方便。您可以瀏覽報表並檢查中間結果。

+0

「流利的語法」哈哈一個不錯的調用 –

+0

「流利」屬於方法鏈接的一個特殊情況:每個後續調用發生在_same_對象上時。 –