如何让自定义二传手检查参数的有效性



我是 Kotlin 的新手,我无法解决一个非常基本的问题:

我想有一个自定义设置器并检查参数值是否有效(如果无效,则抛出异常)。

我的代码:

class Test {
    var presni: Int = 1
        set(value) {
            if (value < 0) {
                throw IllegalArgumentException("Negative value");
            }
            presni = value
        }
}

但它在presni = value行给了我警告:递归属性访问器

Kotlin 中用于检查 setter 中的参数有效性的习惯用语是什么?

您必须使用 Kotlin 提供的自动支持字段。您可以使用field标识符访问它。

class Test {
    var presni: Int = 1
        set(value) {
            if (value < 0) {
                throw IllegalArgumentException("Negative value");
            }
            // Assign the value to the backing field.
            field = value
        }
}
要在将

值保存在支持字段中之前对其进行验证,您还可以使用 Vetoable Delegate。

这是一个示例:

var presni: Int by Delegates.vetoable(1,{ _, _, newValue ->
        newValue >= 0
    })

官方文件说:

如果回调返回true则设置属性的值 到新值,如果回调返回false则新值为 丢弃,财产保持其旧价值。

最新更新