Враховуючи цей шматочок Котліна:
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
усунути проблему.