Тип Колтин - PullRequest
       1

Тип Колтин

1 голос
/ 24 сентября 2019

Я пытаюсь использовать тип 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.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 24 сентября 2019

Попробуйте с этим

@IntDef(MALE, FEMALE)
@Retention(AnnotationRetention.SOURCE)
annotation class UserRoleType {
    companion object {
        const val MALE = 1
        const val FEMALE = 2
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...