我想为字段定义自己的访问器,如下所示:
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
}
如果这不符合您的要求,请更新问题以进行澄清。
关于kotlin - 我们可以定义没有初始值的访问器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670692/