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
}
如果这不符合您的要求,请更新问题以澄清