4

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ステートメントのようなものですか?

PS 関係ないと思いますが、Java スニペットは Android プログラムのものです。

4

5 に答える 5

2

これはmethod chaining in javaで、各メソッドが現在のインスタンスを返すため、そのメソッドから現在返されているオブジェクトで次のメソッドを呼び出すことができます。

于 2014-08-20T08:11:05.923 に答える
0

これはメソッド連鎖であり、各メソッド呼び出しは、呼び出されたオブジェクトを返します。を使用してオブジェクトを作成するときに 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();

しかし、IMO の最初のバージョンははるかに読みやすいです。私は C++ にはあまり詳しくありませんが、同じことができると思います。

編集: これは実際の例です: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableSet.Builder.html

于 2014-08-20T08:16:01.700 に答える
0

そのインスタンスは、Object呼び出された各メソッドによって返され、次の後続のメソッドは、返されたインスタンスを使用してさらに操作します。これは、 を返すことによって内部的に行われthisます。

例:

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

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

上記のメソッドは次のように呼び出すことができます:

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

より包括的で深い説明はここにあります

于 2014-08-20T08:22:08.523 に答える
0

この構文は「x」オブジェクトを作成しています。Java ではオブジェクトが参照であることを知っておく必要があります。この構文は次と同等です。

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

最初にオブジェクトを作成し、次に各メソッドを呼び出します。

于 2014-08-20T08:17:09.223 に答える