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("呵呵呵");
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
可以通过定义匿名函数赋值给一个函数变量:
不过注意示例代码中给的 haveFun 函数在 Java 中并不是 Static 的,因此反射时需要一个 receiver 来执行。
反射不行的吧,不过对于单抽象方法的接口(SAM Type),Kotlin 在调用 java 时,有一个 SAM 转换的机制,从而可以使用 lambda ~
比如 view.post{dosomething()},相当于把需要 Runnable 接口的 post 函数转换成了一个高阶函数。
更多: http://www.jianshu.com/p/6386...
val fs = fun (s: String) { return method.invoke(s) }
纯手打没试,就那意思,不是用as,用方法或者lambda包装一下,
如果你只是希望覆盖实现,还是乖乖使用继承吧。