下面有一个非常简单的类作为示例:
public class Demo {
private int val;
public int getVal() {
return val;
}
public void setVal(@IntRange(from = 1, to = 10) int v) {
val = v;
}
}
在这里,我正在使用IntRange
在 val 上强制设置范围。当我创建一个新对象并尝试在我的代码中设置一个超出范围的值时,这可以很好地工作。例如:
Demo d = new Demo();
d.setVal(500); //android studio highlights this as lint-warning
但是,我想在 compile 和 runtime 强制执行此范围验证,并希望在值不在范围内时引发错误。
我该如何实现?
P.S。我知道我可以在更新变量之前在setVal
方法中检查范围,但这不是我需要的,而是需要通过android的注释库解决的方法。
答案 0 :(得分:1)
要在编译时实施发行版的注释,请将 lint.xml 文件添加以下内容到模块的根目录>
<lint>
<issue id="Range" severity="fatal"/>
</lint>
这样做,您将覆盖“范围”棉绒警告的严重性,并且如果发生此警告,发布版本将失败
可能可以实现一种机制,在运行时强制执行此注释(例如,使用自定义注释处理器),但这要复杂得多,而且不值得花时间
通过注释处理的实现可能如下所示:
带有@IntRange
批注的初始类
public class Demo {
private int val;
public int getVal() {
return val;
}
public void setVal(@IntRange(from = 1, to = 10) int v) {
val = v;
}
}
您可以实现注释处理器,以从初始Demo
类生成以下类
(在编译时生成)
public class DemoWithChecks extends Demo {
public void setVal(int v) {
if (v >= 1 && v <= 10) {
super.setVal(v)
} else {
//value out of range - throw exception or whatever
}
}
}
然后,您可以在代码中使用DemoWithChecks
而不是Demo
来在运行时强制执行注释检查。
P.S。关于编写自己的注释处理器here
的好文章