Враховуючи цей шматочок Котліна:
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"
}
}
Чи є якийсь інший постійний синтаксис Котліна, який працює при посиланні з анотації на Java?
final const valрезультати "фінал є надлишковим модифікатором". Ні це, ні final valусунути проблему.