2015-09-04 94 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_对象上时。 –