Bagaimana Kita Merujuk Konstanta Kotlin dalam Deklarasi Anotasi Java?

13

Mengingat sedikit Kotlin ini:

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

dan kelas Java ini:

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

Kompiler senang dengan println()panggilan. Itu mengeluh tentang penggunaan COWBOY_HATSdalam @Namedanotasi, mengatakan "Nilai atribut harus konstan", seperti yang terlihat di tangkapan layar Android Studio 3.5.3 ini:

Kesalahan Kotlin

Saya mencoba @JvmStaticdan @JvmFieldpada const valdeklarasi tersebut, tetapi kompiler mengeluh bahwa tidak ada yang valid untuk constproperti.

Saya mendapatkan hasil yang sama dari companion object:

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

Apakah ada sintaks konstan Kotlin lain yang berfungsi ketika direferensikan dari anotasi Java?

CommonsWare
sumber
val terakhir? .....
Rick Sanchez
Versi Kotlin mana yang Anda gunakan? Saya tidak bisa mereproduksi ini.
natario
@ RickSanchez: final const valhasil dalam "final adalah pengubah redundan". Baik itu maupun final valmembersihkan masalah.
CommonsWare
@natario: Kotlin 1.3.61
CommonsWare
@natario: Terima kasih telah menunjukkan bahwa Anda tidak dapat menegurnya! Tampaknya ini adalah kesalahan inspeksi Android Studio - kode mengkompilasi dengan baik.
CommonsWare

Jawaban:

10

Saya lupa melihat apakah ini bug Android Studio. :Telapak tangan:

Ternyata jika Anda menjalankan kode, itu berjalan dengan baik. Android Studio 3.5.3 tampaknya mengeluh tidak perlu.

Saya mengajukan laporan bug untuk mencoba mendapatkan konfirmasi masalah.

Terima kasih banyak kepada @natario, yang komentarnya membuat saya sadar bahwa ini mungkin masalah IDE!

CommonsWare
sumber
Keren! Untuk apa nilainya saya menggunakan versi AS yang sedikit lebih tua (masih 3,5).
natario
Oh begitu! Saya juga memiliki versi yang lebih lama, 3.3.2
alvinalvord
1
Pada Kotlin 1.3.70 masalah ini diselesaikan (di Android Studio 3.6.1)
Matthew Bahr