Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Properties 如何重命名属性';科特林的s背场_Properties_Kotlin_Backing Field - Fatal编程技术网

Properties 如何重命名属性';科特林的s背场

Properties 如何重命名属性';科特林的s背场,properties,kotlin,backing-field,Properties,Kotlin,Backing Field,编辑(再次):如果有人感兴趣,您可以 编辑:我知道支持属性,它们将涵盖大多数用例。我不是在寻找一种变通方法,我只是在寻找是否有一种命名支持字段的方法 您可以像这样轻松地重命名属性的getter和setter @get:JvmName("getFancy") @set:JvmName("setFancy") var fancyProperty = ... 但我不知道如何更改支持字段的名称,即使使用@field目标 @field:JvmName("fancy") var fancyProper

编辑(再次):如果有人感兴趣,您可以


编辑:我知道支持属性,它们将涵盖大多数用例。我不是在寻找一种变通方法,我只是在寻找是否有一种命名支持字段的方法


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

@get:JvmName("getFancy")
@set:JvmName("setFancy")
var fancyProperty = ...
但我不知道如何更改支持字段的名称,即使使用
@field
目标

@field:JvmName("fancy")
var fancyProperty = ...
上面给出了一个错误:

此批注不适用于目标“具有支持字段的成员属性”和使用站点目标“@field”


最终,我要做的是与JavaFX的互操作。定义JavaFX属性时,通常遵循以下标准(使用一些附加代码使其变为惰性):

这将允许FXML的绑定功能(使用反射),遵循Java中的标准约定,并且仍然可以从Kotlin轻松使用

在这种情况下,我不能使用backing属性,因为我需要
color
字段成为
ObjectProperty
,但是
color
的getter和setter应该是
color


幸运的是,来自JavaFX的反射足够智能,可以只使用
@get:JvmName(“colorProperty”)
,但也有类似的情况,重叠的字段名可以使用此重命名。

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

根据kotlin示例(不创建支持字段):

因此,需要支持属性解决方案

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:JvmName("color")
@get:JvmName("colorProperty")
val colorProperty: ObjectProperty<Color> =
    SimpleObjectProperty(this, "color", DEFAULT_COLOR)

var color
    get() = colorProperty.get()
    set(value) = colorProperty.set(value)
val isEmpty: Boolean
    get() = this.size == 0