1

这段代码是如何工作的?

        ConfigurationBuilder cb = new ConfigurationBuilder();
              cb.setDebugEnabled(true)
                .setOAuthConsumerKey("")
                .setOAuthConsumerSecret("")
                .setOAuthAccessToken("")
                .setOAuthAccessTokenSecret("");

我们不应该把类似的东西

cb.setOAuthConsumerKey("") etc..

取自这里

4

7 回答 7

12

这些方法旨在允许方法链接

为此,他们只需return this.

例如像这样:

public ConfigurationBuilder setDebugEnabled(boolean debugEnabled) {
    this.debugEnabled = debugEnabled;
    return this;
}

今天,这种模式相当流行,因为它允许稍微不那么冗长的代码。

但是,在 Java 中过多地使用它会导致一个问题:由于 Java 方法只能返回一个值,因此您失去了返回更多有用值的可能性,并且在实践中,您最终会得到一个不一致的代码,其中大多数但不是所有方法遵循这个模式。它仍然是实用的,特别是对于构建和配置您最初直接定义为类参数的对象,但您应该注意不要过度使用它。

于 2013-07-26T17:42:27.697 回答
3

这是“建造者模式”的简单版本。每个方法都会返回this,因此调用者可以将许多调用链接在一起,而不必多次提供对象名称。

于 2013-07-26T17:42:42.667 回答
1

这些方法中的每一个都在更改某些内容后返回原始引用,这使您能够像这样链接方法。

于 2013-07-26T17:42:43.627 回答
1

这是一个将源文件中的一行代码拆分为多行的示例,尽管它在技术上仍然是单行代码。

没有换行符,它看起来像这样:

cb.setDebugEnabled(true).setOAuthConsumerKey("").setOAuthConsumerSecret("").setOAuthAccessToken("").setOAuthAccessTokenSecret("");

多行版本起作用的原因是回车不是 Java 中的语句终止符。(在某些语言中,例如 VB。)因此,在遇到分号之前,编译器会继续将代码作为单个语句执行。

代码被分成多行纯粹是为了可读性。(请记住,代码主要是为人类阅读而编写的,只有次要目的是由机器执行。)

于 2013-07-26T17:44:43.533 回答
0

这被称为“建造者模式”。对方法的每次调用都返回对象实例,因此您可以在“链”中编写对此类方法的许多调用。

于 2013-07-26T17:43:31.497 回答
0

如果可用,请检查 javadoc。我怀疑设置器的返回类型是 ConfigurationBuilder 而不是 void。换句话说,setter 的结尾是这样的:

return this;
于 2013-07-26T17:45:20.380 回答
0

方法链

class Demo{

   public Demo someMethod(){
       //some operations 
       return this; //returns the instance of self
   }

}

这种模式在 Builder Pattern 中最常用。

这样做是为了提供简洁的单行调用来配置对象并在 Builder 中创建对象的实例。

而不是这种类型的调用:

obj.method1();
obj.method2();
obj.method3();

代码更改为单行可读格式:

obj.method1().method2().method3();
于 2013-07-26T17:45:36.977 回答