继续对反射进行实战。
获取构造方法:
先定义一个主构造方法,2个次构造方法,接下来咱们用反射来获取一下构造方法:
其结果:
[fun <init>(kotlin.Int, kotlin.String): com.kotlin.test13.MyTestClass4, fun <init>(kotlin.Int, kotlin.Boolean): com.kotlin.test13.MyTestClass4, fun <init>(kotlin.Int): com.kotlin.test13.MyTestClass4] Process finished with exit code 0
其中有个细节需要注意:
居然在Kotlin中构造函数跟正常的函数都是KFunction,而在Java中构造函数是Constructor,而方法是Method,需要注意。
调用方法:
上面都已经能通过Kotlin反射来获取各种元素了,接下来咱们来调用一下,实际用的话调用的场景也是最多的,下面来看一下:
好,关健的就是如何来调用了,首先得获取要调用的方法,这里跟Java是不太一样的,如下:
好,接下来调用一下:
为啥,看一下错误提示:
那咱们可以这样处理:
如果我们将方法名称故意改成一个不存在的,此时也不会抛空指针,非常安全:
当然还可以如另一种处理方式,就是强制让它可以为空的调用,如下:
此时如果没找到方法,则就会抛空指针了,这是强烈不推荐这样用的:
好,接下来再来调带参数的方法:
瞅一下该call的定义:
操作属性:
此外还有另一种方式来调用属性,如下:
上面只是读取了属性,下面再看个例子,对其进行值的修改,看如何做?
这里就得先了解对于属性在Kotlin的表示了,我们知道是KProperty:
而对于可变的属性则是它:
其中有一个setter,所以设置值可以这么搞: