1 .什么是元编程
元数据:描述数据的数据。
元编程:操作元数据的编程。
程序是数据。 访问描述程序的数据。 例如,通过反射获取类型信息。
数据是程序。 是将这些数据转换成对应程序的所谓代码生成。
总结:
元编程是操作元数据的编程。
元编程删除部分模板代码。
常见元编程技术:反射、宏、模板元编程、路径依赖型。
2.Kotlin和Java的反射
Kotlin的KClass和Java的Class可以看作是相同意义的类型,可以用. Java和. Kotlin的方法在KClass和Class之间相互变换。
Kotlin的KCallable和Java的AccessiableObject都可以理解为可调用的元素。 在Java中,构筑方法是独立的模式,而Kotlin则被统一作为KFunction来处理。
Kotlin的KProperty和Java的Field不太一样。 Kotlin的KProperty通常将整个对应的Getter和Setter指为一个KProperty,而Java的Filed通常只指字段本身。
3.Kotlin的KClass
属性或函数名称
意义
isCompanion
是否为伴生对象
isData
是否为数据类
已禁用
有贴纸类的吗
对象实例
对象实例
复合对象实例
伴随的对象实例
dclaredmemberextensionfunctions
函数扩展
dclaredmemberextensionproperties
扩展属性
memberExtensionFunctions
基类和超类扩展函数
memberExtensionProperties
此类和超类的扩展属性
starProjectedType
类属类型
4.Kotlin的KCallable
Kotlin将Class中的所有属性(Property、函数)和构造函数都视为KCallable。 因为他们是可调用的,都是Class的成员。
API
说明
is abstract :布尔
这个KCallable是抽象的吗
is final :布尔
此KCallable是否为final
is open :布尔
这个KCallable是否是开放的
name:斯特灵
此KCallable的名称
参数:列表
调用此KCallable所需的参数
returnType:KType
此KCallable的返回类型
类型参数:列表
此KCallable的类型参数
可视化: kvisibility?
此KCallable的可见性
呼叫(vararg args : any )? ) : R
指定的参数调用此KCallable
5 .获取参数信息
函数参数: KParameter
API
说明
index:Int
返回参数列表中的索引
isoptin oal :布尔
此参数是否为选项
is vararg :布尔
此参数是否为Vararg
kind:Kind
此参数的kind
name :字符串?
此参数的名称
type:KType
此参数的类型
函数返回值: KType
API
说明
arguments :列表
此类型的类型参数
classifier:KClassifier?
类声明级类型。 类型参数将被忽略
ismarkednullable :布尔
该类型是否标记为可空类型
类型参数: KTypeParameter
6.Kotlin评论
创建注释: annotation class XXX
与Java一样,注释的参数只有常量,并且只支持以下类型:
Java对应的基本类型;
字符串;
类对象;
其他评论;
上述类型的数组。 请注意,必须将基本类型数组指定为对应的XXXArray,例如IntArray。
Kotlin和Java元注释:
Kotlin
Java
评论的目的
kotlin.annotation.Retention
java.lang.annotation.Retention
在哪里使用
kotlin.annotation.Target
java.lang.annotation.Target
文档
kotlin.annotation.Documented
Java.lang.annotation.documented
可重复
kotlin.annotation.Repeatable
Java.lang.annotation.repeatable
Kotlin目前不支持Inherited注释。
Retention值:
取值
说明
源
只存在于源代码中,编译后的class文件不包含注释信息
等级
此注释存在于class文件中,但无法发送并读取
运行时间
注释信息保存在class文件中,可在运行时通过反射获得
目标取值:
Kotlin
Java
说明
等级
类型
作用于班级
ANNOTATION_CLASS
ANNOTATION_TYPE
作用于注释本身,即元注释
TYPE_PARAMETER
TYPE_PARAMETER
作用于类型参数
属性
_
作用于属性
字段
字段
作用于字段(属性通常包含字段Getter和Setter )。
LOCAL_VARIABLE
LOCAL_VARIABLE
作用于局部变量
VALUE_PARAMETER
_
作用于val参数
构造器
构造器
作用于构造函数
函数
方法
作用于函数
属性_ getter
_
作用于Getter
属性_设置
_
作用于设置
类型
TYPE_USE
作用于类型
快速
_
式地起作用
文件
包
影响文件的开头/包声明
TYPEALIAS
_
作用于类型别名
构造函数:
注释具有接受参数的构造函数。 允许的参数类型如下:
与Java本机类型对应的类型;
字符串;
类65:3360class;
枚举;
其他评论;
上述类型的数组。
注释使用位置目标:
@file,@property,@field,@get,@set,@receiver,@param,@setparam,@delegate
7 .获取注释信息
通过反射获取注释信息
注释处理器