Wie können wir Kotlin-Konstanten in einer Java-Annotationsdeklaration referenzieren?

13

Angesichts dieses Kotlin-Teils:

object OldTownRoad {
  const val COWBOY_HATS = "from Gucci"
  const val WRANGLER = "on my booty"
}

und diese Java-Klasse:

public class Scrap {
  @Named(OldTownRoad.COWBOY_HATS)
  public void lilNasXrefs() {
    System.out.println(OldTownRoad.COWBOY_HATS);
    System.out.println(OldTownRoad.WRANGLER);
  }
}

Der Compiler ist mit den println()Aufrufen zufrieden . Es beschwert sich über die Verwendung von COWBOY_HATSin der @NamedAnmerkung und sagt "Attributwert muss konstant sein", wie in diesem Screenshot von Android Studio 3.5.3 gezeigt:

Kotlin Fehler

Ich habe versucht , @JvmStaticund @JvmFieldauf diesen const valErklärungen, aber der Compiler beschwert sich, dass weder für gültig sind constEigenschaften.

Ich erhalte die gleichen Ergebnisse von companion object:

class OldTownRoad {
  companion object {
    const val COWBOY_HATS = "from Gucci"
    const val WRANGLER = "on my booty"
  }
}

Gibt es eine andere Kotlin-Konstantensyntax, die funktioniert, wenn auf eine Java-Annotation verwiesen wird?

CommonsWare
quelle
endgültiger Wert? .....
Rick Sanchez
Welche Kotlin-Version verwenden Sie? Ich kann das nicht reproduzieren.
Natario
@ RickSanchez: final const valführt zu "final ist ein redundanter Modifikator". Weder das noch final valdas Problem klären.
CommonsWare
@natario: Kotlin 1.3.61
CommonsWare
@natario: Danke, dass du darauf hingewiesen hast, dass du es nicht tadeln kannst! Es scheint, dass dies ein betrügerischer Android Studio-Inspektionsfehler ist - der Code wird gut kompiliert.
CommonsWare

Antworten:

10

Ich habe vergessen zu sehen, ob dies ein Android Studio-Fehler war. : Gesichtspalme:

Es stellt sich heraus, dass der Code einwandfrei funktioniert, wenn Sie ihn ausführen. Android Studio 3.5.3 scheint sich unnötig zu beschweren.

Ich habe einen Fehlerbericht eingereicht , um eine Bestätigung des Problems zu erhalten.

Vielen Dank an @natario, dessen Kommentar mir klar machte, dass dies ein IDE-Problem sein könnte!

CommonsWare
quelle
Cool! Für das, was es wert ist, verwende ich eine etwas ältere Version von AS (immer noch 3.5).
Natario
Oh ich verstehe! Ich habe auch eine ältere Version, 3.3.2
Alvinalvord
1
Ab Kotlin 1.3.70 ist dieses Problem gelöst (in Android Studio 3.6.1)
Matthew Bahr