我们可以定义我们的访问器没有init值吗?

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

var item: Item get() {...} set(value) {...} 

我得到一个错误,因为项目没有初始化。 我不能添加lateinit,因为我定义了get和set方法。

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

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


更新:

谢谢你的回复。 我想我没表达清楚。 而且在我多次阅读文档后,我认为答案是否定的。

我的要求是:有一个更简单的替代方法来声明这一点?

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

我们必须声明一个nullabe的支持属性,所以我们可以定制访问者,也可以不要初始化这个字段。

如果你声明一个带有后台的属性,你需要初始化它。 如果你不想初始化它,你可以声明自定义的getter和setter。

 var item: String get() = "my String" set(value) { log(value) //do something with value } 

如果你没有值来初始化属性,那么声明它为空,并用null初始化它

 var item: String? = null get() = field set(value) { field = value //do something with value } 

如果这不符合您的要求,请更新问题来澄清。