我一直试图找出如何将@IntRange(from = 1)
应用于我的Kotlin财产。经过几次尝试失败后,我终于在Java中创建了我想要的类,并将其转换为Android Studio中的Kotlin。这是我的Java类:
import android.support.annotation.IntRange;
public class SimpleThing {
private int val;
@IntRange(from = 1)
public int getVal() {
return val;
}
public void setVal(@IntRange(from = 1) int val) {
this.val = val;
}
}
这是我从Android Studio获得的自动转换:
import android.support.annotation.IntRange
class SimpleThing {
@get:IntRange(from = 1)
var `val`: Int = 0
}
@IntRange
似乎应用于getter但不应用于setter。是否可以将此注释也应用于setter,以便显示相应的lint警告。目前我刚刚重写了set方法以抛出IllegalArgumentException,如下所示:
@get:IntRange(from = 1)
var rowSize: Int = 3
set(value) {
if (value < 1) throw IllegalArgumentException("row size must be at least 1")
field = value
notifyDataSetChanged()
}
我已经尝试添加@set:IntRange(from = 1)
,但我收到错误This annotation does not apply for type void
,因为它试图将@IntRange
应用于返回值(在setter的情况下为空)反对setter争论。
答案 0 :(得分:2)
@setparam
注释似乎是我正在寻找的,但是当我尝试分配超出范围的值时,Android Studio中不会引发任何lint警告。
这是我的新代码:
@get:IntRange(from = 1)
@setparam:IntRange(from = 1)
var rowSize: Int = 3
set(value) {
if (value < 1) throw IllegalArgumentException("row size must be at least 1")
field = value
notifyDataSetChanged()
}
这里我通常希望看到一个lint警告,告诉我我在int范围之外分配一个值
但是,在Kotlin代码中使用SimpleThing类时会出现lint警告
当将Kotlin方法作为Java代码
调用时,也不会出现lint警告看来这个功能还没有实现。
答案 1 :(得分:0)
目前尚无法对此进行测试,但您是否尝试过像这样添加@set:
@set:IntRange(from = 1)
@get:IntRange(from = 1)
var `val`: Int = 0