编辑(再次):如果有人有兴趣,您可以follow this issue on the 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
字段为ObjectProperty<Color>
,但color
的getter和setter应为{{1} }}
幸运的是,来自JavaFX的反射非常智能,只能使用Color
,但是有类似的情况,重叠的字段名称可以使用此重命名。
答案 0 :(得分:-1)
否,这是不可能的。原因是,在某些情况下没有后备字段(因此没有此属性抽象)。
根据kotlin示例(不创建后备字段):
val isEmpty: Boolean
get() = this.size == 0
因此需要后备属性解决方法。