Я пытался выяснить, как применить @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)
, но получаю сообщение об ошибке This annotation does not apply for type void
, потому что он пытается применить @IntRange
к возвращаемому значению (которое недействительно в случае установщика) в отличие от аргумента установщика.
В настоящее время не в состоянии проверить это, но пробовали ли вы добавить такой @set:
@set:IntRange(from = 1)
@get:IntRange(from = 1)
var `val`: Int = 0
Я ищу аннотацию @setparam
, но в Android Studio не появляется предупреждение о ворсинах, когда я пытаюсь назначить значение за пределами диапазона.
Вот мой новый код:
@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()
}
и здесь я обычно ожидал увидеть предупреждение о ворсинках, сообщающее мне, что я назначаю значение за пределами диапазона int
Однако предупреждение о линтах появляется при использовании класса SimpleThing в коде Kotlin.
Предупреждение о линтах также не появляется при вызове метода Kotlin как Java-кода.
Казалось бы, этот функционал просто еще не реализован.
Да то же самое. Аннотации Androidx не применяются линтером в котлине
Ага, это уже пробовал. Я получаю сообщение об ошибке
This annotation does not apply for type void
. Я думаю, что проблема должна быть в каком-то способе указать, что аннотация относится к аргументу метода, а не к типу возвращаемого значения.