Rumah > Java > teks badan

Menggunakan kaedah kotlin dengan kelas nilai dalam tandatangan kod Java

WBOY
Lepaskan: 2024-02-09 08:51:22
ke hadapan
623 orang telah melayarinya

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.

Kandungan soalan

Saya ada entiti kotlin seperti ini

value class entityid(val id: long) {}
Salin selepas log masuk

Dan beberapa antara muka perkhidmatan

interface service() {
    fun do(entityid: entityid)
}
Salin selepas log masuk

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 
}
Salin selepas log masuk

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)
Salin selepas log masuk

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?

Penyelesaian

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))
    }
}
Salin selepas log masuk

Anda kemudian boleh memanggilnya dari java menggunakan long literal:

service.process(42L);
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan