Учитывая это немного Kotlin:
object OldTownRoad {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
и этот класс Java:
public class Scrap {
@Named(OldTownRoad.COWBOY_HATS)
public void lilNasXrefs() {
System.out.println(OldTownRoad.COWBOY_HATS);
System.out.println(OldTownRoad.WRANGLER);
}
}
Компилятор доволен println()
звонками. Он жалуется на использование COWBOY_HATS
в @Named
аннотации: «Значение атрибута должно быть постоянным», как показано на снимке экрана Android Studio 3.5.3:
Я пробовал @JvmStatic
и @JvmField
на этих const val
объявлениях, но компилятор жалуется, что ни один не действителен для const
свойств.
Я получаю те же результаты от companion object
:
class OldTownRoad {
companion object {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
}
Есть ли какой-то другой синтаксис констант Kotlin, который работает при ссылке из аннотации Java?
final const val
результате "final является избыточным модификатором". Ни это, ниfinal val
прояснение проблемы.Ответы:
Я забыл посмотреть, если это ошибка Android Studio. : Facepalm:
Оказывается, если вы запускаете код, он работает нормально. Android Studio 3.5.3, кажется, жалуется без необходимости.
Я подал отчет об ошибке, чтобы попытаться получить подтверждение проблемы.
Большое спасибо @natario, чей комментарий заставил меня понять, что это может быть проблемой IDE!
источник