我最近使用Android Studio的Kotlin插件将Android项目从Java转换为Kotlin。转换后,我的课程中的许多字段都被突出显示,并将鼠标悬停在它们上面会显示消息
此属性具有支持字段
我是否应该从这个消息/警告的存在推断出它总是被认为是更惯用的(在Kotlin中)使用具有明确定义的getter和/或setter的属性?或者IDE是否对信息性消息有点过分热心?包含对官方来源的引用的答案首选:)
答案 0 :(得分:3)
惯用法是使用没有支持属性的属性。支持属性是一种例外情况,自定义getter和setter也是如此。您需要了解“Backing Field”和“Backing Property”之间的区别:
在Kotlin文档中,它讨论了Backing Fields,有时您可以从自定义getter / setter访问这些内容并存在于任何给定属性中。支持field
字段的隐含名称,因此在setter中您可以使用该名称访问此支持字段:
var counter = 0 // the initializer value is written directly to the backing field
set(value) {
if (value >= 0)
field = value
}
另一方面,Backing Property是您定义的值,用于将值存储在另一个私有属性中,并且您可以完全控制该属性。按照惯例,它将是private
并以下划线_
作为前缀。这看起来像:
private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
get() {
if (_table == null)
_table = HashMap() // Type parameters are inferred
return _table ?: throw AssertionError("Set to null by another thread")
}
答案 1 :(得分:2)
没有什么可担心的,这是IDE的一个已知问题。突出显示仅仅是为了您的信息,因为在某些情况下,支持字段需要额外注意。
如果您遇到麻烦,请关闭检查。或者将突出显示更改为不那么明亮。