kotlin能否將java 反射取到method轉(zhuǎn)換為高階函數(shù)? 如果可以如何操作?
問題描述
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('呵呵呵');} }}
問題解答
回答1:反射不行的吧,不過對(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...
相關(guān)文章:
1. docker容器呢SSH為什么連不通呢?2. docker start -a dockername 老是卡住,什么情況?3. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?4. Android TextView 或 ListView 加載過渡效果5. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””6. service mysql.server start 啟動(dòng)失敗7. python - thrift 返回 TSocket read 0 bytes 求助!!!!8. 【python小白】 問關(guān)于之初始化一次對(duì)象的問題9. python - 為什么我直接用requests爬網(wǎng)頁可以,但用scrapy不行?10. python3.x - python中import theano出錯(cuò)
