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