Kotlin反射实践操作详解

继续对反射进行实战。

获取构造方法:

Kotlin反射实践操作详解

先定义一个主构造方法,2个次构造方法,接下来咱们用反射来获取一下构造方法:

Kotlin反射实践操作详解

其结果:

[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反射实践操作详解

居然在Kotlin中构造函数跟正常的函数都是KFunction,而在Java中构造函数是Constructor,而方法是Method,需要注意。

调用方法:

上面都已经能通过Kotlin反射来获取各种元素了,接下来咱们来调用一下,实际用的话调用的场景也是最多的,下面来看一下:

Kotlin反射实践操作详解

好,关健的就是如何来调用了,首先得获取要调用的方法,这里跟Java是不太一样的,如下:

Kotlin反射实践操作详解

好,接下来调用一下:

Kotlin反射实践操作详解

为啥,看一下错误提示:

Kotlin反射实践操作详解

那咱们可以这样处理:

Kotlin反射实践操作详解

如果我们将方法名称故意改成一个不存在的,此时也不会抛空指针,非常安全:

Kotlin反射实践操作详解

当然还可以如另一种处理方式,就是强制让它可以为空的调用,如下:

Kotlin反射实践操作详解

此时如果没找到方法,则就会抛空指针了,这是强烈不推荐这样用的:

Kotlin反射实践操作详解

好,接下来再来调带参数的方法:

Kotlin反射实践操作详解

瞅一下该call的定义:

Kotlin反射实践操作详解

操作属性:

Kotlin反射实践操作详解

此外还有另一种方式来调用属性,如下:

Kotlin反射实践操作详解

上面只是读取了属性,下面再看个例子,对其进行值的修改,看如何做?

Kotlin反射实践操作详解

这里就得先了解对于属性在Kotlin的表示了,我们知道是KProperty:

Kotlin反射实践操作详解

而对于可变的属性则是它:

Kotlin反射实践操作详解

其中有一个setter,所以设置值可以这么搞:

Kotlin反射实践操作详解

上一篇:实战Java的反射机制


下一篇:怀念的东西:Pirka咖啡,芬兰的味道