Comment référencer les constantes Kotlin dans une déclaration d'annotation Java?

13

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_HATSdans l' @Namedannotation, en disant "La valeur d'attribut doit être constante", comme le montre cette capture d'écran d'Android Studio 3.5.3:

Erreur Kotlin

J'ai essayé @JvmStaticet @JvmFieldsur ces const valdéclarations, mais le compilateur se plaint qu'aucune des deux n'est valide pour les constproprié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?

CommonsWare
la source
val final? .....
Rick Sanchez
Quelle version de Kotlin utilisez-vous? Je ne peux pas reproduire cela.
natario
@RickSanchez: final const valrésulte en "final est un modificateur redondant". Ni cela ni final valéclaircir le problème.
CommonsWare
@natario: Kotlin 1.3.61
CommonsWare
@natario: Merci d'avoir souligné que vous ne pouviez pas le reprocher! Il semble que ce soit une erreur d'inspection d'Android Studio - le code se compile très bien.
CommonsWare

Réponses:

10

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!

CommonsWare
la source
Cool! Pour ce que ça vaut, j'utilise une version légèrement plus ancienne d'AS (toujours 3.5).
natario
Oh je vois! J'ai également une version plus ancienne, 3.3.2
alvinalvord
1
Depuis Kotlin 1.3.70, ce problème est résolu (dans Android Studio 3.6.1)
Matthew Bahr