は、私は、委任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)
}
しかし、これはひどいハックのように思えるし、それがされるまでgetBean()とgetName()に正しい値を返しません。プロパティは一度アクセスされます。 SimpleObjectPropertyのように、これらの値をコンストラクタに渡さずに先に取得する方法はありますか?