Учитывая это немного 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прояснение проблемы.