Compte tenu de ce morceau de Kotlin:
object OldTownRoad {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
et cette classe Java:
public class Scrap {
@Named(OldTownRoad.COWBOY_HATS)
public void lilNasXrefs() {
System.out.println(OldTownRoad.COWBOY_HATS);
System.out.println(OldTownRoad.WRANGLER);
}
}
Le compilateur est satisfait des println()
appels. Il se plaint de l'utilisation de COWBOY_HATS
dans l' @Named
annotation, en disant "La valeur d'attribut doit être constante", comme le montre cette capture d'écran d'Android Studio 3.5.3:
J'ai essayé @JvmStatic
et @JvmField
sur ces const val
déclarations, mais le compilateur se plaint qu'aucune des deux n'est valide pour les const
propriétés.
J'obtiens les mêmes résultats d'un companion object
:
class OldTownRoad {
companion object {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
}
Existe-t-il une autre syntaxe constante de Kotlin qui fonctionne lorsqu'elle est référencée à partir d'une annotation Java?
final const val
résulte en "final est un modificateur redondant". Ni cela nifinal val
éclaircir le problème.Réponses:
J'ai oublié de voir s'il s'agissait d'un bogue Android Studio. : facepalm:
Il s'avère que si vous exécutez le code, il fonctionne correctement. Android Studio 3.5.3 semble se plaindre inutilement.
J'ai déposé un rapport de bogue pour essayer d'obtenir la confirmation du problème.
Un grand merci à @natario, dont le commentaire m'a fait réaliser que cela pourrait être un problème IDE!
la source