Saya sebenarnya memiliki pertanyaan ini 30 menit yang lalu, jadi saya mulai mencari-cari dan tidak dapat menemukan solusi atau solusi untuk ini, TAPI saat mencari saya menemukan bagian ini di situs web Kotlinglang yang menyatakan bahwa:
Perhatikan bahwa ekstensi dapat ditentukan dengan jenis penerima yang dapat dinihilkan. Ekstensi semacam itu dapat dipanggil pada variabel objek meskipun nilainya nol.
Jadi saya punya ide paling gila, mengapa tidak mendefinisikan fungsi ekstensi dengan penerima nullable (tanpa benar-benar menggunakan receiver itu) dan kemudian menyebutnya pada objek null! Jadi saya mencobanya, dan berhasil dengan baik, tetapi terlihat sangat jelek. Seperti ini:
(null as Type?).staticFunction(param1, param2)
Jadi saya mengatasinya dengan membuat val di file ekstensi saya dari jenis penerima yang memiliki nilai null dan kemudian menggunakannya di kelas saya yang lain. Jadi, sebagai contoh, berikut adalah cara saya mengimplementasikan fungsi ekstensi "statis" untuk Navigation
kelas di Android: Dalam file NavigationExtensions.kt saya:
val SNavigation: Navigation? = null
fun Navigation?.createNavigateOnClickListener(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null,
navigationExtras: Navigator.Extras? = null) : (View) -> Unit {
return { view: View -> view.navigate(resId, args, navOptions, navigationExtras) }
}
Dalam kode yang menggunakannya:
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
Jelas, ini bukan nama kelas, ini hanya variabel dari jenis kelas yang memiliki nilai null. Ini jelas jelek di sisi pembuat ekstensi (karena mereka harus membuat variabel) dan di sisi pengembang (karena mereka harus menggunakan SType
format alih-alih nama kelas yang sebenarnya), tetapi ini adalah yang terdekat yang dapat dicapai saat ini dibandingkan dengan fungsi statis sebenarnya. Semoga pembuat bahasa Kotlin akan merespon masalah yang dibuat dan menambahkan fitur tersebut ke dalam bahasa tersebut.