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")
,但是有类似的情况,重叠的字段名称可以使用此重命名.
不,这是不可能的。原因是,在某些情况下没有支持字段(因此没有此属性抽象)。
来自 kotlin 示例(不创建支持字段):
val isEmpty: Boolean
get() = this.size == 0
Run Code Online (Sandbox Code Playgroud)
因此需要支持属性解决方法。
归档时间: |
|
查看次数: |
549 次 |
最近记录: |