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?


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!


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.