如何在Kotlin中重命名属性的后台字段
编辑 :我知道关于支持属性,他们将涵盖大多数使用情况。 我不是在寻找解决办法,我特别关注是否有办法来命名支持领域。
您可以轻松地重命名属性的getter和setter,如下所示
@get:JvmName("getFancy") @set:JvmName("setFancy") var fancyProperty = ...
但我不知道如何更改后台字段的名称,即使使用@field
目标。
@field:JvmName("fancy") var fancyProperty = ...
以上给出了一个错误:
此注解不适用于目标’具有后台字段的成员属性’,并使用站点目标’@field’
最终我要做的是与JavaFX进行互操作。 当定义一个JavaFX属性时,通常遵循以下标准(使用一些额外的代码来使其懒惰):
private ObjectProperty color = new SimpleObjectProperty(this, "color", DEFAULT_COLOR); public ObjectProperty colorProperty() { return color; } public Color getColor() { return colorProperty.get(); } public void setColor(Color color) { colorProperty().set(color); }
所以我要做的是这样的(尽管@field
显然不起作用):
@field:JvmName("color") @get:JvmName("colorProperty") val colorProperty: ObjectProperty = SimpleObjectProperty(this, "color", DEFAULT_COLOR) var color get() = colorProperty.get() set(value) = colorProperty.set(value)
这将允许FXML(使用reflection)的绑定function,遵循Java中的标准惯例,并且仍然是从Kotlin使用的很好且易于使用的。
在这种情况下,我不能使用支持属性,因为我需要color
字段为ObjectProperty
,但ObjectProperty
的getter和setter应该是Color
。
幸运的是,来自JavaFX的反思足够聪明,仍然可以使用@get:JvmName("colorProperty")
,但是也有类似的情况,可能会使用这种重命名重叠的字段名称。