Android studio 总是选择属性而不是支持字段是否被视为惯用做法?

Android studio 总是选择属性而不是支持字段是否被视为惯用做法?,android-studio,kotlin,Android Studio,Kotlin,我最近使用Android Studio的Kotlin插件将一个Android项目从Java转换为Kotlin。转换后,我的类中的许多字段高亮显示,将鼠标悬停在这些字段上会显示消息 此属性有一个支持字段 我是否应该从这条消息/警告的存在中推断,将属性与显式定义的getter和/或setter一起使用(在Kotlin中)总是被认为更惯用?或者IDE对信息性消息有点过于热心?包含官方来源参考的答案优先:)无需担心,这是IDE的一个已知问题。突出显示仅用于提供信息,因为在某些情况下,支持字段需要特别小

我最近使用Android Studio的Kotlin插件将一个Android项目从Java转换为Kotlin。转换后,我的类中的许多字段高亮显示,将鼠标悬停在这些字段上会显示消息

此属性有一个支持字段


我是否应该从这条消息/警告的存在中推断,将属性与显式定义的getter和/或setter一起使用(在Kotlin中)总是被认为更惯用?或者IDE对信息性消息有点过于热心?包含官方来源参考的答案优先:)

无需担心,这是IDE的一个已知问题。突出显示仅用于提供信息,因为在某些情况下,支持字段需要特别小心


如果有麻烦,就把检查关了。或者将突出显示改为不太亮。

惯用用法是使用属性而不使用支持属性。支持属性是一种例外情况,自定义getter和setter也是如此。您确实需要了解“支持字段”和“支持属性”之间的区别:

在Kotlin文档中,它讨论了您有时可以从自定义getter/setter访问哪些内容,以及这些内容是否存在于任何给定的属性中。
字段
的支持字段有一个隐含名称,因此在setter中,您可以通过该名称访问此支持字段:

var counter = 0 // the initializer value is written directly to the backing field
  set(value) {
    if (value >= 0)
      field = value
  }
另一方面,A是您定义用于将价值存储在另一个私有财产中的东西,您可以完全控制该私有财产。按照惯例,它将是私有的,并以下划线作为前缀。这看起来像:

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")
  }
private var\u表:映射?=无效的
公共val表:映射
得到(){
如果(_table==null)
_table=HashMap()//类型参数被推断
返回_table?:抛出断言错误(“由另一个线程设置为null”)
}

谢谢!我关闭了突出显示,这似乎也关闭了悬停上显示的信息消息(我找不到单独的检查或明确禁用的意图)。我认为这只是这些字段的坏背景色。把它换成深一点的颜色会让它看起来更好,也不会让人讨厌。@SergeyMashkov同意,颜色很浓;我只是不确定强度背后是否有“更深的含义”!