gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:39:58 24 4
gpt4 key购买 nike

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

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 - 我们可以定义没有init值的访问器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com