Vaadin8(目前处于测试版)附带了一个全新的数据绑定API,它大量使用了Java8的lambda特性。
不幸的是,Java没有属性的概念,因此绑定Bean属性的新方法之一是编写类似于(taken from the documentation):binder.bind(nameField, Person::getName, Person::setName);
由于Kotlin有一个属性的概念,您可能希望编写如下内容:
binder.forField(nameField)
.bind(Person::name)
这可以通过Vaadin绑定器的扩展方法来实现,可能如下所示:
fun <BEAN, T> Binder.BindingBuilder<BEAN, T>.bind(prop: KMutableProperty<T>) {
this.bind(
ValueProvider { bean: BEAN -> prop.getter.call(bean) },
Setter { bean: BEAN, v: T -> prop.setter.call(bean, v) })
}
和Kotlin和Vaadin玩得开心!