它被认为是惯用的,总是喜欢属性而不是支持字段?

我最近使用Android Studio的Kotlin插件将Android项目从Java转换为Kotlin。 转换后,我的班级中的许多字段都被突出显示,并且将鼠标悬停在其上显示消息

这个属性有一个后台字段

Android Studio屏幕截图显示悬停信息

我是否应该从这个消息/警告的存在推断出,它总是被认为比较习惯(在Kotlin中)使用明确定义的getter和/或setter的属性? 或者,IDE对信息消息有点太过分热心了? 包含对官方消息来源的引用的答案优先:)

习惯是使用没有后备属性的属性。 备份属性是个例外情况,自定义获取者和设置者也是如此。 您需要了解“支持领域”和“支持财产”之间的区别:

在Kotlin文档中,它讨论的是Backing Fields ,这些是你有时从自定义的getter / setter访问的,并且存在于任何给定的属性中。 有一个隐含的字段名称,所以在一个setter中,你可以通过这个名字访问这个后台字段:

 var counter = 0 // the initializer value is written directly to the backing field set(value) { if (value >= 0) field = value } 

另一方面, 备份属性是您定义的值,用于将值存储在另一个私有属性中,并且您完全可以控制该属性。 按照惯例,它将是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") } 

没有什么可担心的,这是IDE的一个已知问题。 突出显示只是为了您的信息,因为在某些情况下,后备领域需要特别小心。

如果麻烦你,就把检查关掉。 或者改变高亮不那么明亮。