Статическое конечное значение, назначенное из сопутствующего объекта, не допускается в аннотации - PullRequest
0 голосов
/ 11 мая 2018

Я создал класс в Kotlin:

class Extras {
    companion object {
        var EXTRA_NAME: String? = null

        fun setExtraName() {
           var extraName: String? = null
           //...
           EXTRA_NAME = extraName
        }
    }
}

Я звоню setExtraName() в onCreate() класса приложения.

Затем передал EXTRA_NAME аннотации метода(определено в Java):

static final String EXTRA_NAME = Extras.Companion.getEXTRA_NAME();

@Extra(EXTRA_NAME)
void doSomething() {
}

Однако я получаю следующую ошибку:

Значение атрибута должно быть постоянным

Почему?

1 Ответ

0 голосов
/ 11 мая 2018

Исправление этого

Это компилирует и работает

annotation class Test(
    val value: String
)

object Keys {
    const val API_KEY = "AB"
}

@Test(Keys.API_KEY)
fun doSomething() {

}

const делает значение константой времени компиляции , что позволяет заменить его на аннотацию.

Зачем это нужно

Поскольку аннотации доступны процессорам аннотаций до времени выполнения, они должны быть константами времени компиляции, поэтому в Kotlin их нужно определять с помощью const.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...