Menggunakan kaedah Kotlin dengan kelas nilai dalam tandatangan kod Java ialah teknik pembangunan yang biasa. Kelas nilai ialah jenis khas dalam Kotlin yang boleh digunakan untuk menyimpan dan menghantar data, serupa dengan jenis data asas dalam Java. Dengan menggunakan kaedah Kotlin dengan kelas nilai dalam kod Java, kami boleh memanfaatkan sepenuhnya gula sintaksis Kotlin dan ciri pengaturcaraan berfungsi untuk mengendalikan data dengan cara yang ringkas dan elegan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan kaedah Kotlin dengan kelas nilai dalam kod Java dan meneroka kelebihan dan pertimbangannya. Sama ada anda seorang pembangun Java atau peminat Kotlin, artikel ini akan membawa anda pengetahuan dan petua yang berharga.
Saya ada entiti kotlin seperti ini
value class entityid(val id: long) {}
Dan beberapa antara muka perkhidmatan
interface service() { fun do(entityid: entityid) }
dan pelaksanaannya.
Tetapi apabila saya menggunakan antara muka daripada java kod seperti di bawah
{ ... entityid id = new entityid(1l); service.do(id) // service is interface here }
Saya mendapat ralat kompilasi. Tetapi ini adalah tingkah laku yang sangat difahami kerana pengkompil kotlin menjana fun do(entityid: long)
daripada kod sumber.
Okay, mari kita gunakan sesuatu seperti service.do(1l)
.
Soalan lain akan timbul:
java: cannot find symbol symbol: method do(long)
Saya rasa ini kerana antara muka sebenarnya tidak berubah semasa penyusunan. Saya jumpa jalan - tambah value class
替换为 data class
但我会有 value class
.
Mungkin, adakah terdapat penyelesaian untuk situasi ini?
Anda boleh menggunakan long
的函数重载采用 value 类
的函数,并在后台调用原始函数。注意 @jvmname
上的 value 类
重载,这样 java 只会看到 long
lebihan.
Kotlin
@jvminline value class entityid(val id: long) class service { @jvmname("processentity") fun process(entityid: entityid) { } fun process(entityid: long) { process(entityid(entityid)) } }
Anda kemudian boleh memanggilnya dari java menggunakan long
literal:
service.process(42L);
Atas ialah kandungan terperinci Menggunakan kaedah kotlin dengan kelas nilai dalam tandatangan kod Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!