通过 Kotlin 注解限制参数值

Muh*_*lib 3 java android kotlin

我正在测试 Kotlin 注释,但无法让这段看似简单的代码正常工作

这是我的简单注释

@IntDef(1,2)
@Target(
    AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.SOURCE)
@MustBeDocumented
annotation class OnlyOneTwo
Run Code Online (Sandbox Code Playgroud)

现在我假设如果我用 装饰一个值参数@OnlyOneTwo,如果我给它一个像 那样的值,该方法会引发编译错误5

我像这样使用这个注释

fun onlyTakesOneTwos(@OnlyOneTwo input:Int){

}
onlyTakesOneTwos(6) // shouldn't this throw a compile error ?
Run Code Online (Sandbox Code Playgroud)

我记得在Java中它曾经抛出一个错误。

raj*_* ks 5

首先,编译器不会Kotlin检查这种类型的注释错误,AndroidLint 会检查,这也可能比枚举中更有效Java,但在 中Kotlin,执行这些操作的唯一方法是使用enums,您仍然可以使用@IntDefinKotlin来提供建议,但其他值不会给你一个编译错误。另外,对于 ART,枚举的内存占用并不是什么大问题,Google IO 2018 在谈论ART https://youtu.be/IrMw7MEgADk?t=855时也对此进行了介绍