Mos*_*ses 10 android kotlin android-lint android-annotations kotlin-interop
我一直试图找出如何申请@IntRange(from = 1)我的 Kotlin 财产。经过几次失败的尝试,我终于在 Java 中创建了我想要的类,并将其转换为 Android Studio 中的 Kotlin。这是我的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我从 Android Studio 得到的自动转换:
import android.support.annotation.IntRange
class SimpleThing {
@get:IntRange(from = 1)
var `val`: Int = 0
}
Run Code Online (Sandbox Code Playgroud)
在@IntRange似乎得到应用吸气剂,但不二传手。是否可以将此注释也应用于 setter,以便出现适当的 lint 警告。目前我刚刚覆盖了 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()
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试添加@set:IntRange(from = 1)但我收到错误,This annotation does not apply for type void因为它试图应用于@IntRange返回值(在 setter 的情况下为 void)而不是 setter 参数。
该@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()
}
Run Code Online (Sandbox Code Playgroud)
在这里我通常希望看到一个 lint 警告,告诉我我正在分配一个 int 范围之外的值
但是,在 Kotlin 代码中使用 SimpleThing 类时确实会出现 lint 警告
将 Kotlin 方法作为 Java 代码调用时也不会出现 lint 警告
看起来这个功能还没有实现。
小智 0
目前无法测试这一点,但是您是否尝试过添加一个@set,如下所示:
@set:IntRange(from = 1)
@get:IntRange(from = 1)
var `val`: Int = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4792 次 |
| 最近记录: |