开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 12天,点击查看活动详情
注解处理器
Kotlin中的注解处理器和Java中的一样,注解参数为常量,作用范围为:
- 基本类型
- 字符串
- Class对象
- 注解
- 类型数组,XXXArray
定义方式:比Java中更明显:用annotation修饰类即可。 使用方式: 1.添加注解处理器信息。这需要在classpath里包含META-INFO/services/javax.annotation.processing.Processor文件,并将注解处理器包名和类名写入该文件。 2.使用kapt插件。如果是gradle工程可以通过apply plugin:'kotlin-kapt'添加注解处理器支持。 kapt也支持生成Kotlin代码。
缺点
虽然annotation processor允许开发人员访问程序AST(抽象语法树可查看之前文章JVM编译只是),但没有提供行之有效的代码生成方案,目前仅有的代码生成方案也仅仅是将代码以字符串的形式写入新文件,而无法做到直接将生成的AST作为程序。这也说明了Java和Kotlin目前不具备同像性。
元编程的使用范围
1.外部程序:kotlin的语法糖suger,最终会变成java文件。所以编译器承担了 解语法糖 的角色,编译器作为外部程序去操作这些语法糖(本质也是元数据)也叫作元编程 2.获取运行时数据(反射) 3.动态执行代码(目前无法做到)
元编程需要一定的学习成本,需要了解class结构和kclass等相关程序构成的数据。## 背景 首先还是来说下为什么出现元编程? 一个技术的出现肯定是不满足现状,那么元编程的出现是为了解决什么问题呢?举一个栗子,比如我们需要获取某个类的属性进行赋值取值或者获取函数信息进行调用时,我们当然可以编写代码以让外界访问这些数据,但是这样做容易出错而且特别麻烦,这个时候我们可以想到利用反射也可以达到同样的效果。对吧,获取类变量,函数信息这看起来就是反射可以做到的事情,所以其实反射也属于元编程范畴。