Bolehkah Kotlin menukar kaedah refleksi Java ke dalam fungsi peringkat lebih tinggi? Bagaimana untuk melakukannya jika boleh?
扔个三星炸死你
扔个三星炸死你 2017-06-23 09:13:40
0
1
799

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("呵呵呵");
        }
    }
}
扔个三星炸死你
扔个三星炸死你

membalas semua(1)
仅有的幸福

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...

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan