Come possiamo fare riferimento a Costanti di Kotlin in una dichiarazione di annotazione Java?


13

Dato questo bit di Kotlin:

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

e questa classe Java:

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

Il compilatore è soddisfatto delle println()chiamate. Si lamenta dell'uso di COWBOY_HATSnell'annotazione @Named, dicendo "Il valore dell'attributo deve essere costante", come visto in questo screenshot di Android Studio 3.5.3:

Errore di Kotlin

Ho provato @JvmStatice @JvmFieldsu quelle const valdichiarazioni, ma il compilatore si lamenta che nessuno dei due è valido per le constproprietà.

Ottengo gli stessi risultati da un companion object:

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

C'è qualche altra sintassi costante di Kotlin che funziona quando viene referenziata da un'annotazione Java?


val finale? .....
Rick Sanchez,

Quale versione di Kotlin stai usando? Non riesco a riprodurre questo.
natario

@RickSanchez: il final const valrisultato in "final è un modificatore ridondante". Né quello né final valchiarire il problema.
CommonsWare

@natario: Kotlin 1.3.61
CommonsWare

@natario: grazie per aver sottolineato che non puoi riproporlo! Sembra che si tratti di un errore di ispezione anomalo di Android Studio: il codice viene compilato correttamente.
CommonsWare

Risposte:


10

Ho dimenticato di vedere se si trattava di un bug di Android Studio. : Facepalm:

Si scopre che se si esegue il codice, funziona bene. Android Studio 3.5.3 sembra lamentarsi inutilmente.

Ho presentato una segnalazione di bug per cercare di ottenere la conferma del problema.

Mille grazie a @natario, il cui commento mi ha fatto capire che questo potrebbe essere un problema IDE!


Freddo! Per quello che vale sto usando una versione leggermente più vecchia di AS (ancora 3.5).
Natario,

Oh, capisco! Ho anche una versione precedente, 3.3.2
alvinalvord

1
A partire da Kotlin 1.3.70 questo problema è stato risolto (in Android Studio 3.6.1)
Matthew Bahr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.