这段代码是如何工作的?
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("")
.setOAuthConsumerSecret("")
.setOAuthAccessToken("")
.setOAuthAccessTokenSecret("");
我们不应该像
那样cb.setOAuthConsumerKey("") etc..
取自here
答案 0 :(得分:12)
这些方法旨在允许method chaining。
为此,他们只是return this
。
例如:
public ConfigurationBuilder setDebugEnabled(boolean debugEnabled) {
this.debugEnabled = debugEnabled;
return this;
}
今天,这种模式相当流行,因为它允许稍微冗长的代码。
在Java中使用它太多导致了一个问题,因为:由于Java方法只能返回一个值,因此您失去了返回更多有用值的可能性,并且在实践中,您最终会得到一个不一致的代码,其中大多数但是并非所有方法都遵循此模式。它仍然是实用的,特别是对于您最初直接定义为类的参数的对象的构建和配置,但是您应该注意不要过度使用它。
答案 1 :(得分:3)
这是“builder pattern”的简单版本。每个方法返回this
,因此调用者可以将许多调用链接在一起,而不必多次提供对象名称。
答案 2 :(得分:1)
每个方法在更改内容后返回原始引用,这使您可以链接这样的方法。
答案 3 :(得分:1)
这是在源文件中将一行代码拆分为多行的示例,即使它仍然技术上一行代码。
没有换行符,它看起来像这样:
cb.setDebugEnabled(true).setOAuthConsumerKey("").setOAuthConsumerSecret("").setOAuthAccessToken("").setOAuthAccessTokenSecret("");
多行版本的工作原因是因为回车不是Java中的语句终止符。 (它在某些语言中,例如VB。)因此,在遇到分号之前,编译器会继续将代码作为单个语句执行。
代码分为多行,纯粹是为了便于阅读。 (请记住,代码主要是由人类阅读,并且只有次要的次要目的是由机器执行。)
答案 4 :(得分:0)
这被称为“构建器模式”。每次调用方法都会返回对象实例,因此你可以在“chain”中编写对这些方法的许多调用。
答案 5 :(得分:0)
检查javadoc是否可用。我怀疑setter有一个返回类型的ConfigurationBuilder而不是void。换句话说,制定者的结尾如下:
return this;
答案 6 :(得分: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();