如何使用自定义 setter 初始化属性?
例如,在我的 setter 中,我确保该值不是负数。
class Foo(length: Int) {
var length = length
set(value) {
if (value < 0) throw IllegalArgumentException("Can't be negative.")
field = value
}
}
}
但是,如果我将其称为 Foo(-5)
,则不会调用异常,因为在初始化属性时不会调用 setter。
我尝试的另一件事是在下面,但是将长度设置两次似乎是错误的。
class Foo(length: Int) {
var length = length
set(value) {
if (value < 0) throw IllegalArgumentException("Can't be negative.")
field = value
}
}
init {
this.length = length
}
}
最后我想到了下面的代码,但这似乎是错误的,因为您在两个地方检查了错误的值。
class Foo(length: Int) {
init {
if (length < 0) throw IllegalArgumentException("Can't be negative.")
}
var length = length
set(value) {
if (value < 0) throw IllegalArgumentException("Can't be negative.")
field = value
}
}
}
最佳答案
您的第二个方法已经尽可能干净了,尽管我会将初始值设置为某个常量,例如 0 而不是 length
。然后,如果您忘记在 init
block 中分配 length
,您会收到编译器警告,指出构造函数参数未使用。
关于kotlin - 如何使用进行错误检查的自定义 setter 初始化属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60515389/