Don*_*mmy 3 java annotations java-compiler-api
如果我创建一个自定义注释(例如:@SaveFuncName("saveMe")将添加一个saveMe()使用我的处理器生成的某些代码调用的方法),javac编译器是否可以使用我的注释处理器向该类添加方法?或者我可以只创建一个不同的类?
或者我可以只创建一个不同的类?
那是对的.现有的API不允许我们修改现有的类,只需生成新的类.
从技术上讲,如果你想做一些hacky东西,可以使用内部Javac API直接修改抽象语法树,但它不适合胆小的人.例如,类似的对象TypeElement实际上是直接来自Javac的符号,由接口隐藏.语法树也可通过编译器树API以只读模式使用.我们可以抛弃接口并以这种方式修改代码.这就是龙目岛项目的工作方式.
(但我不建议这样做.我主要是解释它,因为Lombok是一个存在的东西所以它看起来像修改类似乎是可能的.)
最简单的解决方案是执行诸如使用例如saveMe()方法生成超类并扩展它或生成实用程序类并委托给它的操作.(这里也有建议.)
| 归档时间: |
|
| 查看次数: |
5146 次 |
| 最近记录: |