课程信息
课程名称: 一课掌握Kotlin 突破开发语言瓶颈
课程章节: Kotlin反射(9-1)
课程讲师: bennyhuo
课程内容
反射的基本概念
- 反射是允许程序在运行时访问程序结构的一类特性
- 程序结构包括:类、接口、方法、属性等语法特性
反射的依赖
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
implementation "org.jetbrains.kotlin:kotlin-reflect"
}
反射的常见用途
- 列出类型的所有属性、方法、内部类等等
- 调用给定名称及签名的方法或访问指定名称的属性
- 通过签名信息获取泛型实参的具体类型
- 访问运行时注解及其信息完成注入或者配置操作
反射常用的数据结构
KType
- 描述未擦除的类型或泛型参数等,例如Map<String, Int>
- 可通过typeOf或者以下类型获取对应的父类、属性、函数参数等
KClass
- 描述对象的实际类型,不包含泛型参数,例如Map
- 可通过对象、类型名直接获得
KProperty
- 描述属性,可通过属性引用、属性所在类的KClass获取
- 如果没有receiver,那就是KProperty0
- 如果有一个receiver,那就是KProperty1
- 如果有两个receiver,那就是KProperty2
KFunction
- 描述函数,可通过函数引用、函数所在类的KClass获取
- 如果没有receiver,那就是KFunction0
- 如果有一个receiver,那就是KFunction1
- 如果有两个receiver,那就是KFunction2
Kotlin中使用反射
Java反射
- 优点:无需引入额外依赖,首次使用速度相对较快
- 缺点:无法访问Kotlin语法特性,需对Kotlin生成的字节码足够了解
Kotlin反射
- 优点:支持访问Kotlin几乎所有特性,API设计更友好
- 缺点:引入Kotlin反射库,首次调用慢
学习总结
通过本章学习,掌握Kotlin反射的基础知识,了解到Kotlin反射与Java反射两者间的不同之处