Jak możemy odwoływać się do stałych Kotlina w deklaracji adnotacji Java?

13

Biorąc pod uwagę ten kawałek Kotlina:

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

i ta klasa Java:

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

Kompilator jest zadowolony z println()połączeń. Skarży się na użycie COWBOY_HATSw @Namedadnotacji, mówiąc: „Wartość atrybutu musi być stała”, jak widać na zrzucie ekranu Android Studio 3.5.3:

Błąd Kotlina

Próbowałem @JvmStatici @JvmFieldna tych const valdeklaracjach, ale kompilator narzeka, że ​​żadna z nich nie jest ważna dla constwłaściwości.

Otrzymuję te same wyniki od companion object:

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

Czy istnieje inna składnia stałej Kotlin, która działa, gdy odwołuje się do niej adnotacja Java?

CommonsWare
źródło
final val? .....
Rick Sanchez
Z jakiej wersji Kotlin korzystasz? Nie mogę tego odtworzyć.
natario
@ RickSanchez: final const valpowoduje, że „finał jest redundantnym modyfikatorem”. Ani to, ani nie final valrozwiąże problemu.
CommonsWare,
@natario: Kotlin 1.3.61
CommonsWare
@natario: Dziękujemy za zwrócenie uwagi, że nie można tego zrobić ponownie! Wygląda na to, że jest to fałszywy błąd inspekcji w Android Studio - kod dobrze się kompiluje.
CommonsWare

Odpowiedzi:

10

Zapomniałem zobaczyć, czy to błąd w Android Studio. : facepalm:

Okazuje się, że jeśli uruchomisz kod, będzie działał dobrze. Android Studio 3.5.3 wydaje się niepotrzebnie narzekać.

I złożył raport o błędzie , aby spróbować dostać potwierdzenie problemu.

Ogromne podziękowania dla @natario, którego komentarz uświadomił mi, że może to być problem IDE!

CommonsWare
źródło
Fajne! Do tego warto użyć nieco starszej wersji AS (wciąż 3.5).
natario
Rozumiem! Mam też starszą wersję, 3.3.2
alvinalvord,
1
Począwszy od Kotlin 1.3.70 problem ten został rozwiązany (w Android Studio 3.6.1)
Matthew Bahr