Rumah  >  Soal Jawab  >  teks badan

Bolehkah Kotlin menukar kaedah refleksi Java ke dalam fungsi peringkat lebih tinggi? Bagaimana untuk melakukannya jika boleh?

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

membalas semua(1)saya akan balas

  • 仅有的幸福

    仅有的幸福2017-06-23 09:15:40

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

    balas
    0
  • Batalbalas