Как написать член в аннотации Kotlin?

У меня есть следующая аннотация 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?

Вы читали документация?

Louis Wasserman 14.06.2019 08:45

@LouisWasserman, да, я уже прочитал это, но не смог. Я знаю, как использовать аннотацию, но ее реализация все еще сложна для меня.

Шах 14.06.2019 08:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
958
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В 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

Yanick Salzmann 14.06.2019 09:04

Спасибо за ответ, теперь это чисто для меня.

Шах 14.06.2019 09:09

Это может быть «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.

Шах 14.06.2019 09:12

Я рад, что это сработало, это мой первый положительный результат!!! Ура :) и вам спасибо.

ust 14.06.2019 09:20

Другие вопросы по теме