这个Java对象初始化语法需要解释说明。

4

我是一名开始接触Java的C\C++程序员。

我看到这个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程序。

2
方法链 (Method chaining) - Gabriel Negut
1
在C++中,您也可以使用相同的语法,只需使成员函数返回“this”,就可以像之前一样链接调用。 - Some programmer dude
@JoachimPileborg 你指的是 *this,我想 :-) - Angew is no longer proud of SO
1
@Spurdow:这不是建造者模式。 - Gabriel Negut
@Angew 这取决于你想要如何链接它,是用点语法还是箭头语法。 :) - Some programmer dude
@GabrielNegut 我承认错误,那真是大开眼界。谢谢。 - Spurdow
5个回答

4
那些链式调用之所以可行,是因为每个setter方法都返回了一个指向this的引用:
public object SetContent(final String input){
    this.aaa = input;
    return this;
}

2
这是Java中的“方法链”,每个方法都返回当前实例,以便您可以在从该方法返回的当前对象上调用下一个方法。请保留HTML标签:

这是java中的方法链,每个方法都返回当前实例,以便您可以在从该方法返回的当前对象上调用下一个方法。


0

这个语法创建了一个名为'x'的对象,你应该知道在Java中对象是引用类型。 这个语法等同于:

private object x = new object();
x.setContent(aaa);
x.setIcon(bbb);
x.setText(ccc);

首先创建对象,然后调用每个方法。


0

每个被调用的方法都返回该Object的实例,下一个后续方法使用该返回的实例进一步操作。这在内部通过返回this来完成。

示例:

Object methodFirst(Object ob1)
{
ob1.doSomeOperations();
return this;
}

Object methodSecond(Object ob1)
{
ob1.doSomeOtherOperations();
return this;
}

上述方法可以这样调用:

Object newObject = oldObject.methodFirst().methodSecond(); 

可以在这里找到更全面和深入的解释。


0

这是方法链式调用,其中每个方法调用都返回它被调用的对象。在使用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();

但是在我看来,第一个版本更易读。虽然我不是太懂C++,但我认为你也可以在那里做同样的事情。

编辑:这里有一个实际的例子: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableSet.Builder.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接