kotlin能否將java 反射取到method轉(zhuǎn)換為高階函數(shù)? 如果可以如何操作?
這里只是舉一個(gè)例子,實(shí)際執(zhí)行會(huì)報(bào)錯(cuò)。
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)//這里并不行 會(huì)報(bào)java.lang.reflect.Method cannot be cast to kotlin.jvm.functions.Function1
fu("呵呵呵");
}
}
}
反射不行的吧,不過(guò)對(duì)于單抽象方法的接口(SAM Type),Kotlin 在調(diào)用 java 時(shí),有一個(gè) SAM 轉(zhuǎn)換的機(jī)制,從而可以使用 lambda ~
比如 view.post{dosomething()},相當(dāng)于把需要 Runnable 接口的 post 函數(shù)轉(zhuǎn)換成了一個(gè)高階函數(shù)。
更多: http://www.jianshu.com/p/6386...