Для применения этой аннотации на время компиляции для выпусков сборки добавьте lint.xml файл со следующим содержимым в корень вашего модуля
<lint>
<issue id="Range" severity="fatal"/>
</lint>
Этим вы переопределяете серьезность предупреждения lint «Range», и сборка выпуска завершится неудачей , если произойдет это предупреждение
Может быть возможно реализовать механизм, который будет применять эту аннотациюво время выполнения (например, с использованием пользовательского процессора аннотаций), но это намного сложнее и не стоит усилий
Реализация с помощью обработки аннотаций может работать следующим образом:
Исходный класс с аннотацией @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
в вашем коде для обеспечения проверки аннотаций во время выполнения.
PS Хорошая статья о написании ваших собственных процессоров аннотаций здесь