gpt4 book ai didi

android - 如何将 @IntRange() 支持注释应用于 Kotlin 属性 setter

转载 作者:行者123 更新时间:2023-12-04 15:17:48 26 4
gpt4 key购买 nike

我一直在想知道如何申请@IntRange(from = 1)到我的 Kotlin 属性(property)。经过几次失败的尝试后,我终于在 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;
}

}

这是我从 Android Studio 得到的自动转换:
import android.support.annotation.IntRange

class SimpleThing {

@get:IntRange(from = 1)
var `val`: Int = 0

}
@IntRange似乎适用于 getter,但不适用于 setter。是否可以将此注释应用于 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()
}

我已经尝试添加 @set:IntRange(from = 1)但我收到错误 This annotation does not apply for type void因为它试图申请 @IntRange返回值(在 setter 的情况下为 void),而不是 setter 参数。

最佳答案

@setparam注释似乎是我正在寻找的东西,但是当我尝试分配范围之外的值时,Android Studio 中没有发出 lint 警告。

这是我的新代码:

@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()
}

这是我通常希望看到一个 lint 警告的地方,告诉我我正在分配一个 int 范围之外的值

enter image description here

但是,在 Kotlin 代码中使用 SimpleThing 类时确实会出现 lint 警告

enter image description here

将 Kotlin 方法作为 Java 代码调用时也不会出现 lint 警告

enter image description here

看起来这个功能还没有实现。

关于android - 如何将 @IntRange() 支持注释应用于 Kotlin 属性 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50115999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com