Kotlin本身带的反射Api依据官方文档来看貌似是残缺的,想实现完整的反射支持只能调用Java的反射Api,类似下面这样:
这样就可以通过test对象调用Java的反射Api了,这样在操作Java Class的时候是没问题的,但是操作Kotlin的KClass就会出现变量作用域的问题……
问题的根源在于Kotlin代码在翻译成Java代码后无论你先前声明的成员变量的作用域是公有还是私有,都会被翻译成私有,并辅以一堆Get、Set方法用来操作该变量。这似乎是挺符合Java世界的标准的,在Kotlin下访问一个变量会自动调用其Get、Set方法。但在反射的这个应用场景下就会出问题[……]