The generated content of the FooBinding class is basically a lot of small inner-classes that defer evaluating their property until their get or set methods are called.
E.g. something like:
public class FooBinding {
private Foo foo;
// for turning Foo.name into a Binding
public StringBinding name() {
return new StringBinding {
public String get() {
return FooBinding.this.foo.name;
}
public void set(String name) {
FooBinding.this.foo.name = name;
}
};
}
// for turning Foo.bar into a Binding
public BarBinding bar() {
return new BarBinding {
public Bar get() {
return FooBinding.this.foo.bar;
}
public void set(Bar bar) {
FooBinding.this.foo.bar = bar;
}
};
}
}
public class BarBinding {
private Bar bar;
// for turning Bar.zaz into a Binding
public StringBinding zaz() {
return new StringBinding() {
public String get() {
return BarBinding.this.bar.zaz;
}
public void set(String zaz) {
BarBinding.this.bar.zaz = zaz;
}
};
}
}