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



我是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(); 

相关内容

  • 没有找到相关文章

最新更新