首页 > 试题广场 >

Kotlin反射的方式有哪些?实际开发中使用Kotlin反射

[问答题]
Kotlin反射的方式有哪些?实际开发中使用Kotlin反射有哪些限制?
只听过名字
发表于 2019-08-13 17:41:20 回复(0)

在Kotlin中,字节码对应的类是kotlin.reflect.KClass,因为Kotlin百分之百兼容Java,所以Kotlin中可以使用Java中的反射,但是由于Kotlin中字节码.class对应的是KClass类,所以如果想要使用Java中的反射,需要首先获取Class的实例,在Kotlin中可以通过以下两种方式来获取Class实例。

//1.通过实例.javaClass  var hello = HelloWorld() hello.javaClass //2.通过类Kclass类的.java属性 HelloWorld::class.java 

获取了Class实例,就可以调用上面介绍的方法,获取各种在Java中定义的类的信息了。

当然Kotlin中除了可以使用Java中的反射以外,还可以使用Kotlin中声明的一些方法,当然同Java中反射一样,想要使用这些方法,先要获取Kclass对象,在Kotlin中可以通过以下两种方式获取Kclass实例。

//1.通过类::class的方式获取Kclass实例  val clazz1: KClass<*> = HelloWorld::class //2.通过实例.javaClass.kotlin获取Kclass实例 var hello = HelloWorld() val clazz2 = hello.javaClass.kotlin
otlin 反射耗时确实比 Java 反射耗时长,毕竟一方面没有 Java 虚拟机加成,Kotlin 的反射主要依赖于 @MetaData 注解,可参考:Kotlin 反射与 MetaData 的关系在混淆后浮出水面!认识下 Kotlin 反射背后的男人:@Metadata,另一方面 Kotlin 反射提供的能力也比 Java 反射多很多(这主要与 Kotlin 本身的语法特性多是相对应的),所以付出多少得到多少,只要它的慢在合理范围内,我们其实也是可以接受的。
发表于 2020-03-04 19:04:35 回复(0)