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