首页 > 解决方案 > 在 init 块中初始化变量并在 kotlin 中为变量定义一个 setter

问题描述

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

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

init {
    a = 2
}

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

标签: kotlinvariablesgetter-setter

解决方案


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

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

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

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

在块中调用它init不一定足够,因为它可能会使属性处于未初始化状态。

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


推荐阅读