Android中如何为Kotlin属性的setter添加@IntRange注解支持
在Kotlin中为属性添加@IntRange注解的正确姿势
我懂你之前直接给Kotlin属性加@IntRange注解碰壁的烦恼,通过Java类转Kotlin的思路确实能帮我们找到正确的写法。先来看Android Studio自动转换后的代码:
import android.support.annotation.IntRange class SimpleThing { var `val`: Int = 0 @IntRange(from = 1) get set(@IntRange(from = 1) value) { field = value } }
为什么直接给属性加注解会失败?
在Kotlin中,如果你直接把@IntRange标注在属性变量上,这个注解只会作用于属性的底层存储字段,而不会对getter的返回值和setter的参数生效——这正是你之前尝试无效的核心原因。
更简洁的写法
你也可以用Kotlin的目标注解语法,直接在属性上指定注解作用于getter和setter,代码会更紧凑:
import android.support.annotation.IntRange class SimpleThing { @set:IntRange(from = 1) @get:IntRange(from = 1) var value: Int = 1 // 初始化值要符合范围,避免初始状态就违反约束 }
关键说明
@get:IntRange(from = 1):指定注解作用于getter的返回值,确保获取属性值时符合1及以上的范围要求。@set:IntRange(from = 1):指定注解作用于setter的参数,确保赋值时传入的数值符合范围约束。- 初始化值一定要符合
@IntRange的要求(比如这里设为1),否则会触发编译警告或运行时校验问题。
内容的提问来源于stack exchange,提问作者fraterboots
相关产品推荐
相关产品推荐

