最近在使用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方法
欢迎大家留言讨论
网友评论