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_HATS
na @Named
anotação, dizendo "O valor do atributo deve ser constante", como visto nesta captura de tela do Android Studio 3.5.3:
Eu tentei @JvmStatic
e @JvmField
nessas const val
declarações, mas o compilador reclama que nenhum deles é válido para const
propriedades.
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 val
resulta em "final é um modificador redundante". Nem isso nemfinal val
esclarecer o problema.Respostas:
Esqueci de ver se era um bug do Android Studio. : facepalm:
Acontece que, se você executar o código, ele funcionará bem. O Android Studio 3.5.3 parece estar reclamando desnecessariamente.
Arquivei um relatório de bug para tentar obter a confirmação do problema.
Muito obrigado a @natario, cujo comentário me fez perceber que isso pode ser um problema de IDE!
fonte