Contoh pertama (dengan field const) dapat digunakan untuk atribut. Kasus populer: mendeklarasikan semua jalur api web dalam satu file dan mereferensikannya dari pengontrol dengan kode seperti: "@RequestMapping (path = arrayOf (WebPathConstants.MapApiPath))" (atribut Spring Boot)
Manushin Igor
Hai kawan! Apakah Anda tahu jika @JvmField ini masih diperlukan? Saya menggunakan ini di android dan ini menunjukkan peringatan lint yang mengatakan bahwa "const" dapat digunakan sebagai gantinya. Saya mengubahnya menjadi const dan kelas java yang menggunakannya tidak memiliki masalah.
Leandro Ocampo
1
@LeandroOcampo itu masih diperlukan jika Anda memiliki bidang statis yang dapat berubah, const val- kompilasi konstanta waktu dan pasti dapat digunakan sebagai pengganti @JvmField valdalam beberapa kasus. Melalui itu tidak berfungsi jika nilai - dihitung dalam runtime, atau bukan tipe primitif atau String. Ref: kotlinlang.org/docs/reference/…
Ruslan
36
jika Anda memiliki implementasi dalam Hello, gunakan companion objectdi dalam kelas
classHello{
companion object{
val MAX_LEN =1+1}}
jika Helloadalah objek tunggal murni
objectHello{
val MAX_LEN =1+1}
jika propertinya adalah konstanta waktu kompilasi, tambahkan constkata kunci
objectHello{const val MAX_LEN =20}
jika Anda ingin menggunakannya di Java, tambahkan @JvmStaticanotasi
Jawaban:
Menurut dokumentasi Kotlin, ini setara:
Pemakaian:
Juga ini adalah properti akhir statis (bidang dengan pengambil):
Dan akhirnya ini adalah bidang terakhir statis:
sumber
const val
- kompilasi konstanta waktu dan pasti dapat digunakan sebagai pengganti@JvmField val
dalam beberapa kasus. Melalui itu tidak berfungsi jika nilai - dihitung dalam runtime, atau bukan tipe primitif atau String. Ref: kotlinlang.org/docs/reference/…jika Anda memiliki implementasi dalam
Hello
, gunakancompanion object
di dalam kelasjika
Hello
adalah objek tunggal murnijika propertinya adalah konstanta waktu kompilasi, tambahkan
const
kata kuncijika Anda ingin menggunakannya di Java, tambahkan
@JvmStatic
anotasisumber
Untuk saya
adalah terlalu banyak boilerplate. Saya dengan sederhana meletakkan bidang terakhir statis di atas kelas saya seperti ini
sumber
private
), definisi ini adalah yang paling ringkas.