kotlin - 在 init 块中初始化变量并在 kotlin 中为变量定义一个 setter
问题描述
我想写这段代码,但它不起作用。
private var a: Int
set(value) {
field = a
// Code
}
init {
a = 2
}
我必须在声明变量时对其进行初始化。为什么会这样?我该如何解决?
解决方案
您的属性有一个自定义设置器,当您a = 2
在init
块中调用时,该设置器的代码将运行。
该代码可能是任意复杂的,编译器无法确定它是否最终会设置属性的支持字段的值。在您的代码示例中,它将设置支持字段,并且您的属性将处于有效状态。
但是,您也可以有一个自定义设置器,例如:
private var a: Int
set(value) {
if (value > 0) {
field = value
}
}
在块中调用它init
不一定足够,因为它可能会使属性处于未初始化状态。
为了防止这种情况,编译器会要求您在属性声明时为其设置一个值,而不是在使用自定义设置器时。
推荐阅读
- python - 从 csv 读取数据并将其存储到 python 数据结构中
- excel - excel嵌套if和语句 - 看不出为什么它不起作用
- reactjs - 进行更改后将 Power BI 嵌入式报表保存在数据库中
- sql - ORDER BY 子句中区分大小写的默认选项
- reactjs - 无法拖动 React 引导选项卡 - React Beautiful dnd
- amazon-web-services - 容器化监控
- python - 如何在程序运行时进行 random.randint 刷新?
- ruby-on-rails - 在控制器中检测基本网址?
- python - 在 python 函数中使用库
- ruby-on-rails - ActiveModelSerializers:camel_lower 配置不起作用