¿Cómo podemos hacer referencia a las constantes de Kotlin en una declaración de anotación Java?


13

Dado este pedazo de Kotlin:

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

y esta clase de Java:

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

El compilador está contento con las println()llamadas. Se queja del uso de COWBOY_HATSen la @Namedanotación, diciendo "El valor del atributo debe ser constante", como se ve en esta captura de pantalla de Android Studio 3.5.3:

Error de Kotlin

Lo intenté @JvmStaticy @JvmFielden esas const valdeclaraciones, pero el compilador se queja de que ninguno de ellos es válido para las constpropiedades.

Obtengo los mismos resultados de a companion object:

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

¿Hay alguna otra sintaxis constante de Kotlin que funcione cuando se hace referencia desde una anotación Java?


val final? .....
Rick Sanchez

¿Qué versión de Kotlin estás usando? No puedo reproducir esto.
natario

@RickSanchez: final const valda como resultado "final es un modificador redundante". Ni eso ni final valaclarar el problema.
CommonsWare

@natario: Kotlin 1.3.61
CommonsWare

@natario: ¡Gracias por señalar que no podías reprobarlo! Parece que este es un error de inspección falso de Android Studio: el código se compila bien.
CommonsWare

Respuestas:


10

Olvidé ver si esto era un error de Android Studio. : facepalm:

Resulta que si ejecuta el código, funciona bien. Android Studio 3.5.3 parece quejarse innecesariamente.

Presenté un informe de error para intentar obtener la confirmación del problema.

¡Muchas gracias a @natario, cuyo comentario me hizo darme cuenta de que esto podría ser un problema IDE!


¡Frio! Por lo que vale, estoy usando una versión un poco más antigua de AS (todavía 3.5).
natario

¡Oh ya veo! También tengo una versión anterior, 3.3.2
alvinalvord

1
A partir de Kotlin 1.3.70 este problema está resuelto (en Android Studio 3.6.1)
Matthew Bahr
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.