Я пытался выяснить, как применить @IntRange(from = 1) к моему свойству Kotlin. После нескольких неудачных попыток я наконец создал нужный класс на 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), но получаю ошибку. Эта аннотация не применима к типу void потому что он пытается применить @IntRange к возвращаемому значению (которое является недействительным в случае установщика), а не к аргументу установщика.
Подробнее здесь:
https://stackoverflow.com/questions/501 ... in-android