搜尋

首頁  >  問答  >  主體

kotlin能否將java 反射取到method轉換為高階函數?如果可以如何操作?

kotlin能否將java 反射取到method轉換為高階函數?如果可以如何操作?
這裡只是舉個例子,實際執行會報錯。

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

全部回覆(1)我來回復

  • 仅有的幸福

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

    反射不行的吧,不過對於單抽象方法的介面(SAM Type),Kotlin 在呼叫java 時,有一個SAM 轉換的機制,從而可以使用lambda ~
    比如view.post{dosomething()},相當於把需要Runnable 介面的post 函數轉換成了一個高階函數。

    更多:http://www.jianshu.com/p/6386...

    回覆
    0
  • 取消回覆