如何在Kotlin中重命名属性的支持字段

Ruc*_*oom 5 properties backing-field kotlin

编辑(再次):如果有人有兴趣,您可以在跟踪器上关注此问题.


编辑:我知道支持属性,他们将涵盖大多数用例.我不是在找工作,我特别想知道是否有办法命名支持字段.


您可以轻松地重命名属性的getter和setter

@get:JvmName("getFancy")
@set:JvmName("setFancy")
var fancyProperty = ...
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何更改支持字段的名称,即使使用@field目标.

@field:JvmName("fancy")
var fancyProperty = ...
Run Code Online (Sandbox Code Playgroud)

上面给出了一个错误:

此注释不适用于具有支持字段的目标'成员属性'并使用站点目标'@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);
}
Run Code Online (Sandbox Code Playgroud)

所以我想要的是这样的事情(虽然@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)
Run Code Online (Sandbox Code Playgroud)

这将允许FXML(使用反射)的绑定功能,遵循Java中的标准约定,并且仍然很好并且易于使用Kotlin.

在这种情况下,我不能使用支持属性,因为我需要color字段为a ObjectProperty<Color>,但getter和setter color应该是a Color.

幸运的是,来自JavaFX的反射非常智能,仍然只能使用@get:JvmName("colorProperty"),但是有类似的情况,重叠的字段名称可以使用此重命名.

Pin*_*irl 0

不,这是不可能的。原因是,在某些情况下没有支持字段(因此没有此属性抽象)。

来自 kotlin 示例(不创建支持字段):

val isEmpty: Boolean
    get() = this.size == 0
Run Code Online (Sandbox Code Playgroud)

因此需要支持属性解决方法。