反射(Reflection) 是程序的自我分析能力,通过反射可以确定类中有哪些函数以及属性。反射机制在一般的应用开发中很少使用,主要用于框架开发。
Kotlin 语言本身提供了反射 API,也可以通过调研 Java 语言反射 API 实现反射。通过反射机制能够动态读取一个类的信息;能够在运行时动态加载类,而不是在编译期。反射可以应用于框架开发,它能够从配置文件中读取配置信息动态加载类、调用函数和调用属性等。
Kotlin 反射 API
Kotlin 反射 API 主要来自于 kotlin.reflect
、kotlin.reflect.full
和 kotlin.reflect.jvm
包。其中 kotlin.reflect
、kotlin.reflect.full
是主要的 Kotlin 反射 API,而 kotlin.reflect.jvm
包主要用于 Kotlin 反射 和 Java 反射的互操作。
kotlin.reflect
包是 Kotlin 反射核心 API,它的类图如下图 1-1 所示,它们都是接口,详细说明如下:
-
KCkass
。表示一个具有反射功能的类。 -
KParameter
。表示一个具有反射功能的 可传递给函数或属性的参数。 -
KCallable
。表示具有反射功能的可调用实例,包括属性和函数,它的直接子接口有 KProperty 和 KFunction。 -
KFunction
。表示一个具有反射功能的函数。 -
KProperty
。表示一个具有反射功能的属性,它有很多子接口。KProperty0、KProperty1 和 KProperty2 后面的数字表示接收者作为参数的个数。 -
KMutableProperty
。表示一个具有反射功能的使用 var 声明的属性。KMutableProperty0、KMutableProperty1 和 KMutableProperty2 后面的数字含义同 KProperty。
注意:Kotlin 反射 API 所需要的运行时组件来自于独立的 kotlin-reflect.jar
文件,在 Android 等移动平台上为了减少应用程序包的大小,应用程序包再默认情况下不包含 kotlin-reflect.jar
文件。如果要在应用中使用反射功能,则需要额外添加 kotlin-reflect.jar
文件至应用程序包中,并添加 kotlin-reflect.jar
到项目的类路径。
网友评论