Android Kotlin 反射使用 (null receiv

2020-12-14  本文已影响0人  30eb7fe7eef0

最近在使用Kotlin反射遇到些问题,总结一下:
报错:java.lang.NullPointerException: null receiver
原来写法: (直接从Java转的Kotlin)

val clazz = Class.forName("xxxxx")
val method = clazz.getMethod("start", Context::class.java)
method.invoke(null, c)

会报错java.lang.NullPointerException: null receiver
查阅资料后发现是因为kotlin的object是单例模式,所以不先实例化是会报错的,所以做了如下修改

val clazz = Class.forName("xxxxx")

val constructor =  clazz.getDeclaredConstructor()
constructor.isAccessible = true

val target = constructor.newInstance()
val method = clazz.getDeclaredMethod("start",Context::class.java)
method.isAccessible = true

method.invoke(target, context)

至此可正常反射调用到start方法


欢迎大家留言讨论

上一篇 下一篇

猜你喜欢

热点阅读