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

时间:2014-08-20 08:08:11

标签: java android c++ syntax object-initialization

我是一名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程序。

5 个答案:

答案 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