如何使用自定义setter检查参数的有效性?
我是Kotlin的新手,我无法围绕一个非常基本的问题:
我想有一个自定义的setter,并检查参数值是否有效(如果没有,抛出exception)。
我的代码:
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 } }
要在将值保存到后台字段之前validation值,还可以使用可调参数代理。
这是一个例子:
var presni: Int by Delegates.vetoable(1,{ _, _, newValue -> newValue >= 0 })
官方文件说:
如果回调函数返回
true
,则该属性的值将被设置为新值,如果回调函数返回false
则新值将被丢弃,并且该属性将保持其旧值。