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?


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!


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.