Kotlin 如何使用缩写形式重写属性设置器?
我只想用缩写形式覆盖默认设置器,但我失败了:Kotlin 如何使用缩写形式重写属性设置器?,kotlin,Kotlin,我只想用缩写形式覆盖默认设置器,但我失败了: class MyViewModel: ViewModel() { var progress: Int = 0 set(value) = MathUtils.clamp(value, 0, 100) } 它显示必需:单位,但找到:Int 我做错了什么?属性设置器是属性的实际设置器,缩写形式只是一种简化形式,让函数返回单个表达式的结果 set(value) { field = MathUtils.clamp(value,
class MyViewModel: ViewModel() {
var progress: Int = 0
set(value) = MathUtils.clamp(value, 0, 100)
}
它显示必需:单位,但找到:Int
我做错了什么?属性设置器是属性的实际设置器,缩写形式只是一种简化形式,让函数返回单个表达式的结果
set(value) {
field = MathUtils.clamp(value, 0, 100)
}
现在,field=value
是赋值,而不是表达式,因此不能在这里使用。但是,如果您真的想用更短的形式实现它,那么仍然可以使用更详细的形式
set(value) = run { field = MathUtils.clamp(value, 0, 100) }
setter不应该返回值。@BoristheSpider,似乎我刚刚得到,这个表单用于将lambda设置为setter。我认为这是一个模拟的
set(value){field=value}
@boristesspider,谢谢!在lambda中以一个简短的函数形式分配一个字段值让我有点发抖…@boristesspider在生产代码中不应该做什么,但这是可能的,因此在本文中值得注意。您可以执行set(value)=run{field=MathUtils.clamp(value,0100)}
但是就像使用let
一样,它只会使事情变得更长。@ErwinBolwidt但是let
更好。Thanksbetter使用字段=值。强制输入(01100)