我是Kotlin的新手,我无法解决一个非常基本的问题:
我想拥有一个自定义setter并检查参数值是否有效(如果没有则抛出异常)。
我的代码:
class Test {
var presni: Int = 1
set(value) {
if (value < 0) {
throw IllegalArgumentException("Negative value");
}
presni = value
}
}
但它在presni = value
行给出了警告:递归属性访问者
Kotlin中用于检查设置器中参数的有效性的成语是什么?
答案 0 :(得分:7)
您必须使用Kotlin提供的自动backing field。
您可以使用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
}
}
答案 1 :(得分:7)
要在将值保存到支持字段之前验证值,您还可以使用Vetoable Delegate。
这是一个例子:
var presni: Int by Delegates.vetoable(1,{ _, _, newValue ->
newValue >= 0
})
官方文件说:
如果回调返回
true
,则设置属性的值 到新值,如果回调返回false
,则新值为 丢弃,财产仍然是旧的价值。