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.