kotlin值得系列6、kotlin的反射,走一个?

138 阅读2分钟

本文是kotlin值得系列第5篇

反射(Reflection)是一组语言和库特性,用于在运行时检查程序的结构

先从Java的反射说起

首先,JVM加载Java文件的过程是怎么样的?

  • 编译阶段,.java文件会被编译成.class文件,.class文件是一种二进制文件
  • JVM中的类加载器会读取字节码文件,取出二进制数据,加载到内存中,并且解析.class文件的信息。
  • 类加载器会获取类的二进制字节流,在内存中生成代表这个类的java.lang.Class对象。
  • 最后会开始类的生命周期,比如连接、初始化等等。

而Java的反射,就是去操作这个 java.lang.Class对象

Kotlin的反射,可以说在在Java的基础上,提供了更加丰富的API。

提示:
    在Java平台(JVM)上使用kotlin反射功能,需要在项目中添加kotlin反射库的jar包(kotlin-reflect.jar)!        
    因为kotlin反射库JAR文件(kotlin-reflect.jar)是单独分发的,不包含在kotlin标准库中,
    这是为了减少[不使用反射功能的应用]所需运行库的大小!

kotlin常用的数据结构

4种:泛型类型或参数、类、属性、方法/函数

  • KType:描述未擦除的类型或泛型参数等,例如Map<String,Int>;
  • KClass:可通过typeOf或者以下类型获取对应的父类、属性、函数参数等描述对象的实际类型,不包含泛型参数,例如Map。可通过对象、类型名直接获得
  • KProperty:描述属性,可通过属性引用、属性所在类的KClass获取
  • KFunction:描述函数,可通过函数引用、函数所在类的KClass获取

关于具体使用,可以参考这个歌文章:

blog.csdn.net/qq_31339141… 写的还是不错的。


参考:

www.jianshu.com/p/52ab689ce…