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?


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!


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.