Я пытаюсь использовать тип IntDef def, чтобы ограничить конкретный тип параметра функцией. Но когда я использую IntDef, использующий java, он работает правильно, но в то же время не работает с 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.Любая помощь будет оценена.