如何在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") ,但是也有类似的情况,可能会使用这种重命名重叠的字段名称。

Interesting Posts