我是 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
则新值为 丢弃,财产保持其旧价值。