我是CC++
程序员,刚开始做Java
。
我遇到了这个工作的Java代码片段语法,我理解它的作用,但我不能理解语法的逻辑。
object x = new object
.SetContent(aaa)
.SetIcon(bbb)
.SetText(ccc);
我得到等效的C++
代码是:
object* x = new object;
x->SetContent(aaa);
x->SetIcon(bbb);
x->SetText(ccc);
谁能给我解释一下Java语法中的逻辑?
这是不是有点像Visual Basic的With
语句?
注:不要认为这很重要,但是Java片段来自Android程序。
这些链式调用是可能的,因为每个setter方法返回对this
的引用:
public object SetContent(final String input){
this.aaa = input;
return this;
}
这是method chaining in java
,其中每个方法返回当前实例,以便您可以从该方法调用当前返回对象的下一个方法。
这是方法链,其中每个方法调用返回它所调用的对象。在Java中使用Builder
创建对象是很常见的,例如
Foo foo = FooBuilder.builder()
.setBar("bar")
.setVolume(11)
.setAnswer(42)
.build();
每个.set___()
方法返回更新的构建器对象,最后的build()
调用返回实际的Foo
实例。完全等同于这样做:
FooBuilder builder = FooBuilder.builder();
builder = builder.setBar("bar");
builder = builder.setVolume(11);
builder = builder.setAnswer(42);
Foo foo = builder.build();
但是在我看来,第一个版本可读性更好。我不是一个c++爱好者,但我认为你可以在那里做同样的事情。
编辑:这是一个现实生活中的例子:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableSet.Builder.html这个语法是创建'x'对象,您应该知道对象在Java中是引用。该语法相当于:
private object x = new object();
x.setContent(aaa);
x.setIcon(bbb);
x.setText(ccc);
首先它创建对象然后调用每个方法
该Object
的实例由每个调用的方法返回,下一个后续方法使用返回的实例进行进一步操作。这是通过返回this
在内部完成的。
的例子:
Object methodFirst(Object ob1)
{
ob1.doSomeOperations();
return this;
}
Object methodSecond(Object ob1)
{
ob1.doSomeOtherOperations();
return this;
}
以上方法可以这样调用:
Object newObject = oldObject.methodFirst().methodSecond();