Como podemos fazer referência a constantes Kotlin em uma declaração de anotação Java?


13

Dado este pedaço de Kotlin:

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

e esta classe Java:

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

O compilador está satisfeito com as println()chamadas. Ele reclama do uso de COWBOY_HATSna @Namedanotação, dizendo "O valor do atributo deve ser constante", como visto nesta captura de tela do Android Studio 3.5.3:

Erro Kotlin

Eu tentei @JvmStatice @JvmFieldnessas const valdeclarações, mas o compilador reclama que nenhum deles é válido para constpropriedades.

Eu obtenho os mesmos resultados de companion object:

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

Existe alguma outra sintaxe constante do Kotlin que funciona quando referenciada a partir de uma anotação Java?


val final? .....
Rick Sanchez

Qual versão do Kotlin você está usando? Eu não posso reproduzir isso.
natario 29/12/19

@ RickSanchez: final const valresulta em "final é um modificador redundante". Nem isso nem final valesclarecer o problema.
CommonsWare

@natario: Kotlin 1.3.61
CommonsWare

@atario: Obrigado por apontar que você não pode reproduzi-lo! Parece que este é um erro de inspeção não autorizado do Android Studio - o código é compilado corretamente.
CommonsWare

Respostas:


10

Esqueci de ver se era um bug do Android Studio. : facepalm:

Acontece que, se você executar o código, ele funcionará bem. O Android Studio 3.5.3 parece estar reclamando desnecessariamente.

Arquivei um relatório de bug para tentar obter a confirmação do problema.

Muito obrigado a @natario, cujo comentário me fez perceber que isso pode ser um problema de IDE!


Legal! Para o que vale a pena, estou usando uma versão um pouco mais antiga do AS (ainda 3.5).
natario 29/12/19

Ah eu vejo! Eu também tenho uma versão mais antiga, 3.3.2
alvinalvord 29/12/19

11
A partir do Kotlin 1.3.70, esse problema foi resolvido (no Android Studio 3.6.1)
Matthew Bahr
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.