java - 通过注释 Kotlin 限制参数中的值
问题描述
我正在测试 Kotlin 注释,但无法让这个看似简单的代码工作
这是我的简单注释
@IntDef(1,2)
@Target(
AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.SOURCE)
@MustBeDocumented
annotation class OnlyOneTwo
现在我假设如果我用 装饰一个值参数@OnlyOneTwo
,如果我给它一个像5
.
我正在使用这样的注释
fun onlyTakesOneTwos(@OnlyOneTwo input:Int){
}
onlyTakesOneTwos(6) // shouldn't this throw a compile error ?
我记得在Java中它曾经抛出一个错误。
解决方案
首先,不是Kotlin
编译器检查这种类型的注释错误,Android
Lint 确实如此,这也可能有效并且优于枚举Java
,但是在 中Kotlin
,执行这些操作的唯一方法是使用enums
,您仍然可以使用@IntDef
inKotlin
来提供建议,但其他values 不会给你一个编译错误。同样对于 ART,枚举的内存占用空间也不是什么大问题,Google IO 2018 也在讨论ART
https://youtu.be/IrMw7MEgADk?t=855时也提到了这一点
推荐阅读
- postgresql - PL/PGSQL 运算符不存在:information_schema.sql_identifier
- css - 为什么 1rem 比 1.1rem、1.2rem 等大
- java - 在 Java 中传递对象并尝试以多种方式更改它们
- javascript - ajax请求成功时不显示数据
- codenameone - LoadingTextAnimation 工作要求
- flutter - 获得打击警报以验证 macOS 中的颤振安装和版本?
- python - 类型错误:返回类型必须是字符串、字典、元组、响应实例或 WSGI 可调用,但它是一个列表
- conda - conda meta.yaml 要求从文件运行部分依赖项
- c# - c#如何在文件上使用这个函数
- java - java.lang.NoClassDefFoundError: org/yaml/snakeyaml/constructor/BaseConstructor