Bolehkah Kotlin menukar kaedah pantulan Java kepada fungsi tertib tinggi? Bagaimana untuk melakukannya jika boleh?
Ini hanyalah contoh, pelaksanaan sebenar akan mengakibatkan ralat.
class A { fun haveFun(s:String){ print(s); } } fun main(args: Array) { val forName = Class.forName("com.gwsoft.tests.A") forName?.let { val method = forName.getMethod("haveFun", String::class.java) method?.let { val fu=method as ((s:String)-> Unit)//这里并不行 会报java.lang.reflect.Method cannot be cast to kotlin.jvm.functions.Function1 fu("呵呵呵"); } } }
Refleksi tidak mungkin, tetapi untuk antara muka kaedah abstrak tunggal (Jenis SAM), Kotlin mempunyai mekanisme penukaran SAM apabila memanggil java, jadi anda boleh menggunakan lambda~
Sebagai contoh, view.post{dosomething()}, yang setara ke Fungsi pos yang memerlukan antara muka Runnable ditukar kepada fungsi tertib lebih tinggi.
Lagi: http://www.jianshu.com/p/6386...