编辑(再次):如果有人感兴趣,您可以在 tracker 上关注此问题。
编辑:我知道支持属性,它们将涵盖大多数用例。我不是在寻找解决方法,而是在专门寻找是否有办法命名支持字段。
您可以像这样轻松地重命名属性的 getter 和 setter
@get:JvmName("getFancy")
@set:JvmName("setFancy")
var fancyProperty = ...
但我无法弄清楚如何更改支持字段的名称,即使使用@field
目标。
@field:JvmName("fancy")
var fancyProperty = ...
上面给出了一个错误:
此注释不适用于目标“带有支持字段的成员属性”并使用站点目标“@field”
最终我想要的是与 JavaFX 互操作。在定义 JavaFX 属性时,您通常遵循以下标准(使用一些额外的代码使其变得懒惰):
private ObjectProperty<Color> color = new SimpleObjectProperty<>(this, "color", DEFAULT_COLOR);
public ObjectProperty<Color> 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<Color> =
SimpleObjectProperty(this, "color", DEFAULT_COLOR)
var color
get() = colorProperty.get()
set(value) = colorProperty.set(value)
这将允许 FXML 的绑定功能(使用反射),遵循 Java 中的标准约定,并且在 Kotlin 中仍然很好且易于使用。
在这种情况下,我不能使用支持属性,因为我需要该color
字段是 a ObjectProperty<Color>
,但 getter 和 setter forcolor
应该是 a Color
。
幸运的是,来自 JavaFX 的反射足够智能,仍然可以仅使用@get:JvmName("colorProperty")
.,但是在字段名称重叠的类似情况下可以使用这种重命名。