我注意到,当我有一个var带有自定义的属性时get,不使用field标识符,无论如何都会生成一个支持字段.我检查了字节码,文档也这样说:
如果属性使用至少一个访问器的默认实现,或者自定义访问者通过字段标识符引用它,则将为该属性生成支持字段.
(重点是我的)
考虑这样的一个类.由于它是var属性,set因此将生成默认值(因此支持字段):
class Banana {
var ripeness = 1
var color: String = "green"
get() = when {
ripeness > 80 -> "brown"
ripeness > 50 -> "yellow"
else -> "green"
}
}
val b = Banana()
b.color = "blue"
println(b.color)
Run Code Online (Sandbox Code Playgroud)
但是,println无论我设置什么,它都将始终打印为"绿色" color.无论如何,支持字段将设置为"蓝色".
由于无法在访问器方法之外(或通过反射)访问它,我真的想不出这个的原因.
我在这里错过了什么吗?也许是用例或其他方式访问支持领域?或者它只是一个错误(或IntelliJ中缺少警告)?
kotlin ×1