我尝试使用IntDef类型定义函数来限制特定类型的参数。但是当我用java使用IntDef时,它可以正常工作,但同时,它不能与kotlin一起工作。下面是我的代码片段:
在JAVA中-
@IntDef({CASH,WITHDRAW})
@Retention(RetentionPolicy.SOURCE)
public @interface TransTypeJava {
int CASH = 1; int WITHDRAW = 2;
}在科特林-
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类型以外的值来显示任何错误。任何帮助都将不胜感激。
发布于 2019-09-24 18:08:52
试试这个
@IntDef(MALE, FEMALE)
@Retention(AnnotationRetention.SOURCE)
annotation class UserRoleType {
companion object {
const val MALE = 1
const val FEMALE = 2
}
}https://stackoverflow.com/questions/58077786
复制相似问题