在init块中初始化变量并在kotlin中为该变量定义一个setter

2024-03-23

我想写这段代码,但它不起作用。

private var a: Int
    set(value) {
        field = a
        // Code
    }

init {
    a = 2
}

我必须在声明变量时对其进行初始化。为什么会发生这种情况?我该如何解决?


您的属性有一个自定义设置器,当您调用时a = 2 in the init块,该设置器的代码将运行。

该代码可能任意复杂,并且编译器无法确定它最终是否会设置属性的支持字段的值。在您的代码示例中,它将设置支持字段,并且您的属性将处于有效状态。

但是,您也可以有一个自定义设置器,如下所示:

private var a: Int
    set(value) {
        if (value > 0) {
            field = value
        }
    }

在一个initblock 不一定就足够了,因为它可能会使属性处于未初始化状态。

为了防止这种情况,编译器会要求您在属性声明时设置一个值,而不是在使用自定义设置器时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在init块中初始化变量并在kotlin中为该变量定义一个setter 的相关文章