gpt4 book ai didi

javafx - 从 getValue() 和 setValue() 函数之外的 Delegated Property 中获取 KProperty 信息

转载 作者:行者123 更新时间:2023-12-02 13:15:22 25 4
gpt4 key购买 nike

我正在尝试实现 JavaFX Property与委托(delegate)的 Kotlin 属性接口(interface),以便可以像这样使用它:

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)
}

但是,这个类没有实现接口(interface)的 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 所要求的那样?

最佳答案

这在 Kotlin 的预发布版本中曾经是可能的,其中委托(delegate)属性有一个额外的方法 propertyDelegated()在委托(delegate)属性的初始设置期间调用。该方法在 1.0 之前不久被删除,但它(或等效功能)很可能会在 future 的版本中重新添加。

目前,我怀疑您现有的解决方案是最好的选择。

关于javafx - 从 getValue() 和 setValue() 函数之外的 Delegated Property 中获取 KProperty 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com