У меня есть следующая аннотация Java:
@Retention(RetentionPolicy.RUNTIME)
@MapKey
@interface ViewModelKey {
Class<? extends ViewModel> value();
}
Чтобы преобразовать его в аннотацию Kotlin, я переписал его, как показано ниже:
@Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ViewModelKey {
fun value(): Class<out ViewModel> {}
}
Но есть ошибка: Members are not allowed in annotation class.
Если участникам не разрешено, как я могу преобразовать аннотацию Java в Kotlin?
@LouisWasserman, да, я уже прочитал это, но не смог. Я знаю, как использовать аннотацию, но ее реализация все еще сложна для меня.




В Kotlin вы должны определять свойства, а не функции в аннотациях:
@Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ViewModelKey(val value: KClass<out ViewModel>)
Подробнее см. в https://kotlinlang.org/docs/reference/annotations.html.
Посмотрите документацию для конструкторов: kotlinlang.org/docs/reference/classes.html#constructors
Спасибо за ответ, теперь это чисто для меня.
Это может быть «KClass»;
@Retention(RetentionPolicy.RUNTIME)
@MapKey
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html
Спасибо! Да, Class не работает, KClass используется в образцах аннотационной документации Kotlin.
Я рад, что это сработало, это мой первый положительный результат!!! Ура :) и вам спасибо.
Вы читали документация?