Saya mengubah beberapa kode Java saya ke Kotlin dan saya tidak begitu mengerti bagaimana cara membuat antarmuka yang didefinisikan dalam kode Kotlin. Sebagai contoh, saya memiliki antarmuka (didefinisikan dalam kode Java):
public interface MyInterface {
void onLocationMeasured(Location location);
}
Dan kemudian lebih lanjut dalam kode Kotlin saya, saya instantiate antarmuka ini:
val myObj = new MyInterface { Log.d("...", "...") }
dan itu bekerja dengan baik. Namun, ketika saya mengonversi MyInterface ke Kotlin:
interface MyInterface {
fun onLocationMeasured(location: Location)
}
Saya mendapatkan pesan kesalahan: Interface MyListener does not have constructors
ketika saya mencoba untuk instantiate - meskipun menurut saya tidak ada yang berubah kecuali sintaksis. Apakah saya salah mengerti bagaimana antarmuka bekerja di Kotlin?
Location -> Unit
) daripada antarmuka metode tunggal jika mungkin - apakah itu benar?Solusi terbaik adalah dengan menggunakan typealias di tempat antarmuka Java Anda
typealias MyInterface = (Location) -> Unit
Daftarkan seperti ini:
atau bahkan lebih bersih
Aktifkan seperti ini:
3 opsi saat ini tampaknya:
Saat mengonversi pustaka kami ke Kotlin, kami sebenarnya meninggalkan semua antarmuka dalam kode Java, karena lebih bersih untuk memanggil Java dari Kotlin daripada Kotlin dari Kotlin.
sumber
Coba akses ke antarmuka Anda seperti ini:
sumber
jika Anda memiliki kelas Java seperti ini:
Anda harus mengkonversi kode ini dari Jawa ke Kotlin seperti ini:
convert Java Interface :
untuk Gaya Antarmuka Kotlin :
sumber
Jika antarmuka adalah untuk metode pendengar kelas, ubah definisi antarmuka ke tipe fungsi. Itu membuat kode lebih ringkas. Lihat yang berikut ini.
Kelas yang mengandung definisi pendengar
Kelas lain
sumber
sumber