Kotlin 我们可以在没有init值的情况下定义访问器吗?

Kotlin 我们可以在没有init值的情况下定义访问器吗?,kotlin,Kotlin,我想为字段定义自己的访问器,如下所示: var item: Item get() {...} set(value) {...} 我收到一个错误,因为项未初始化。我无法添加lateinit,因为我定义了get和set方法 我可以选择的是声明另一个可为null的字段,并使用该字段实现项访问器,这太愚蠢和冗余了 所以我想必须有其他的方法来实现这个要求 更新: 谢谢你的回复。 我想我没有表达清楚。在我读了很多遍文件后,我想答案是否定的 我的要求是:有没有更简单的方法来声明这一点 pr

我想为字段定义自己的访问器,如下所示:

var item: Item
    get() {...}
    set(value) {...}
我收到一个错误,因为项未初始化。我无法添加lateinit,因为我定义了get和set方法

我可以选择的是声明另一个可为null的字段,并使用该字段实现项访问器,这太愚蠢和冗余了

所以我想必须有其他的方法来实现这个要求


更新:

谢谢你的回复。 我想我没有表达清楚。在我读了很多遍文件后,我想答案是否定的

我的要求是:有没有更简单的方法来声明这一点

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”)
}

我们必须声明一个nullabe backing属性,这样我们就可以自定义访问器,并使字段保持未初始化状态。

如果您声明一个带有backing字段的属性,则需要对其进行初始化。如果不想初始化它,可以声明自定义getter和setter

var item: String
    get() = "my String"
    set(value) {
        log(value)
        //do something with value
    }
如果没有用于初始化属性的值,请将其声明为null并使用
null

var item: String? = null
    get() = field
    set(value) {
        field = value
        //do something with value
    }
如果这不符合您的要求,请更新问题以澄清