我是一名C\C++
程序员,刚开始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
声明吗?
P.S。 不要认为这很重要,但Java片段来自Android程序。
答案 0 :(得分:4)
这些链调用是可能的,因为每个setter方法都返回对this
:
public object SetContent(final String input){
this.aaa = input;
return this;
}
答案 1 :(得分:2)
这是method chaining in java
,其中每个方法返回当前实例,以便您可以从该方法调用当前返回对象的下一个方法。
答案 2 :(得分:0)
它是method chaining,其中每个方法调用都返回它所调用的对象。在使用Builder
创建对象时,在Java中很常见,例如
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();
但IMO的第一个版本更具可读性。我不是一个C ++人,但我认为你可以在那里做同样的事情。
编辑:这是一个现实生活中的例子: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableSet.Builder.html
答案 3 :(得分:0)
这个语法是创建'x'对象,你应该知道对象是Java中的引用。 此语法等同于:
private object x = new object();
x.setContent(aaa);
x.setIcon(bbb);
x.setText(ccc);
所以首先创建对象,然后调用每个方法。
答案 4 :(得分:0)
每个被调用的方法返回Object
的实例,下一个后续方法使用返回的实例进一步操作。这是通过返回this
。
示例:
Object methodFirst(Object ob1)
{
ob1.doSomeOperations();
return this;
}
Object methodSecond(Object ob1)
{
ob1.doSomeOtherOperations();
return this;
}
上述方法可以称为:
Object newObject = oldObject.methodFirst().methodSecond();
可以找到更全面,更深入的解释here