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<String>) {
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...