Kotlin属性和Vaadin 8 Beanbinder[代码片段]


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玩得开心!