【问题标题】:Create getter/setter but without a field member创建 getter/setter 但没有字段成员
【发布时间】:2019-06-07 09:11:13
【问题描述】:

在 Kotlin 中,您可以创建一个同时具有 getter 和 setter 的变量:

var mRetrievingConnections: Boolean?

var retrievingConnections: Boolean?
    get() = mRetrievingConnections
    set(value) {
      mRetrievingConnections = value
    }

但我想知道是否没有一种方法可以做到这一点而不必要求私有成员字段。 Kotlin 声明它为 setter 提供了内置的支持字段,但是 getter 如何访问这个支持字段。我正在寻找这样的东西(这是不允许的):

var retrievingConnections: Boolean?
    get() = field
    set(value) {
    }

我觉得这很奇怪,因为 setter 可以访问支持字段,所以无论何时设置值,它都会自动存储。但是如何在 getter 中检索该值?

【问题讨论】:

  • 你的代码是正确的,除了set实际上没有设置值,你需要初始化var。例如。 var retrievingConnections: Boolean? = null
  • 您可以在 setter 中访问fieldset(value){ field = value } 也可以使用。
  • 你想做什么? Var 属性默认有 get/set。
  • @Januson 实际上,在阅读文档时,Kotlin 并没有说 var 变量默认具有 get/set。但是 gpunto 是正确的。如果我不使用它们,那么就把它们排除在外。我只是将其理解为字段变量与具有 getter/setter 的变量之间存在差异。
  • @AndroidDev 是的:“默认 getter 和 setter 隐含”,“具有 Int 类型,默认 getter 和 setter”。

标签: kotlin


【解决方案1】:

根据我的评论,这是正确的代码:

var retrievingConnections: Boolean? = null
    get() = field
    set(value) {
        field = value
    }

注意这段代码等价于

var retrievingConnections: Boolean? = null

因此,如果您不在 get 和/或 set 内部做更多的事情,它不会增加任何价值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多