我正在尝试 IntDef typedef 来限制函数的特定类型参数。但是,当我使用 Java 使用 IntDef 时,它可以正常工作,但与此同时,它不能与 kotlin 一起使用。下面是我的代码片段-
在 JAVA 中 -
@IntDef({CASH,WITHDRAW})
@Retention(RetentionPolicy.SOURCE)
public @interface TransTypeJava {
int CASH = 1; int WITHDRAW = 2;
}
在 Kotlin 中——
const val CASH = 1 const val WITHDRAW = 2
@IntDef(CASH, WITHDRAW)
@kotlin.annotation.Retention(AnnotationRetention.SOURCE)
internal annotation class TransTypeKotlin
在类里面使用 -
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
demo(TransTypeJava.CASH)// Working
demo(1) // Showing compile time error
}
fun demo(@TransTypeJava type:Int){}
调用演示函数给我一个错误,指出必须是以下之一:
TransTypeJava.CASH
、TransTypeJava.WITHDRAW
通过传递 TransTypeJava
类型以外的值。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
demo(TransTypeKotlin.CASH) //Working
demo(1) // Working
}
fun demo(@TransTypeKotlin type: Int){}
在将它与 kotlin 一起使用时,它不会通过传递 TransTypeKotlin 类型以外的值来显示任何错误。任何帮助将不胜感激。
最佳答案
尝试一下
@IntDef(MALE, FEMALE)
@Retention(AnnotationRetention.SOURCE)
annotation class UserRoleType {
companion object {
const val MALE = 1
const val FEMALE = 2
}
}
关于Kotlin 类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58077786/