Dado este pedaço de Kotlin:
object OldTownRoad {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
e esta classe Java:
public class Scrap {
@Named(OldTownRoad.COWBOY_HATS)
public void lilNasXrefs() {
System.out.println(OldTownRoad.COWBOY_HATS);
System.out.println(OldTownRoad.WRANGLER);
}
}
O compilador está satisfeito com as println()chamadas. Ele reclama do uso de COWBOY_HATSna @Namedanotação, dizendo "O valor do atributo deve ser constante", como visto nesta captura de tela do Android Studio 3.5.3:

Eu tentei @JvmStatice @JvmFieldnessas const valdeclarações, mas o compilador reclama que nenhum deles é válido para constpropriedades.
Eu obtenho os mesmos resultados de companion object:
class OldTownRoad {
companion object {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
}
Existe alguma outra sintaxe constante do Kotlin que funciona quando referenciada a partir de uma anotação Java?
final const valresulta em "final é um modificador redundante". Nem isso nem final valesclarecer o problema.