我可以从编译时注释向类添加方法吗?

如果我创建一个自定义注释(例如: @SaveFuncName("saveMe")将添加一个名为saveMe()的方法,其中包含我的处理器生成的一些代码),javac编译器是否可以使用我的注释处理器向该类添加方法? 或者我可以只创建一个不同的类?

或者我可以只创建一个不同的类?

那是对的。 现有的API不允许我们修改现有的类,只需生成新的类。

从技术上讲,如果你想做一些hacky东西,可以使用内部Javac API直接修改抽象语法树,但它不适合胆小的人。 例如,像TypeElement这样的对象实际上是直接来自Javac的符号,接口对我们隐藏了。 语法树也可通过编译器树API以只读模式使用。 我们可以抛弃接口并以这种方式修改代码。 这就是龙目岛项目的工作方式。

(但我不建议这样做。我主要是解释它,因为Lombok是一个存在的东西所以看起来修改类似乎是可能的。)

最简单的解决方案是执行诸如使用例如saveMe()方法生成超类并扩展它或生成实用程序类并委托给它的操作。 ( 这里也有建议。)