Android — нужно объяснение этого синтаксиса инициализации Java-объекта

Я 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 Утверждение?

Постскриптум
Не думаю, что это имеет значение, но фрагмент Java взят из программы Android.

4

Решение

Эти цепные вызовы возможны, потому что каждый метод установки возвращает ссылку на this:

public object SetContent(final String input){
this.aaa = input;
return this;
}
4

Другие решения

Это method chaining in java, где каждый метод возвращает текущий экземпляр, чтобы вы могли вызвать следующий метод для текущего возвращаемого объекта из этого метода.

2

Это метод цепочки, где каждый вызов метода возвращает объект, для которого он был вызван. Это очень часто можно увидеть в 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

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
По вопросам рекламы [email protected]