Я пытался выяснить, как применить @IntRange(from = 1)
к моей собственности в Котлине. После нескольких неудачных попыток я, наконец, просто создал нужный класс в Java и преобразовал его в Kotlin в Android Studio. Вот мой класс 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
применяется к получателю, но не к установщику. Можно ли применить эту аннотацию к установщику так, чтобы появилось соответствующее предупреждение о ворсе. В настоящее время я только что переопределил метод 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
к возвращаемому значению (которое является недействительным в случае с установщиком), а не с аргументом установки.