【发布时间】:2017-02-11 23:12:01
【问题描述】:
我正在尝试使用委托的 Kotlin 属性实现 JavaFX Property 接口,以便可以像这样使用它:
class Foo(bar:Bar){
val barProperty=PropertyFX(bar)
var bar by barProperty
}
我为此编写了一个小类(大部分):
class PropertyFX<T>(value:T):SimpleObjectProperty<T>(value),ReadWriteProperty<Any?,T>{
override fun getValue(thisRef:Any?,property:KProperty<*>)=get()
override fun setValue(thisRef:Any?,property:KProperty<*>,value:T)=set(value)
}
但是,这个类没有实现接口的 getBean() 和 getName() 方法。它们应该分别从 getValue() 和 setValue() 函数中引用的参数返回值 thisRef 和 property.name,但我无法从函数外部访问这些参数。
我可以在第一次使用它们时存储这些值,如下所示:
class PropertyFX<T>(value:T):SimpleObjectProperty<T>(value),ReadWriteProperty<Any?,T>{
private var bean:Any?=null
private var name=""
override fun getBean()=bean
override fun getName()=name
override fun getValue(thisRef:Any?,property:KProperty<*>):T{
bean=thisRef
name=property.name
return get()
}
override fun setValue(thisRef:Any?,property:KProperty<*>,value:T){
bean=thisRef
name=property.name
set(value)
}
但这似乎是一个可怕的 hack,它不会返回正确的 getBean() 和 getName() 值,直到该属性被访问一次。有没有办法在不将它们传递给构造函数的情况下提前获取这些值,就像SimpleObjectProperty 所要求的那样?
【问题讨论】:
标签: javafx properties delegates kotlin