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



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

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

这是正确的。现有的API不允许我们修改现有的类,只允许生成新的类。

从技术上讲,如果你想做一些技巧性的事情,可以使用内部Javacneneneba API直接修改抽象语法树,但这不适合心脏虚弱的人。例如,像TypeElement这样的对象实际上是一个直接来自Javac的符号,通过接口对我们隐藏。语法树也可以通过编译器树API以只读模式使用。我们可以丢弃接口,并以这种方式修改代码。例如,龙目工程就是这样运作的。

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

最简单的解决方案是用saveMe()方法生成一个超类并对其进行扩展,或者生成一个实用程序类并委托给它

最新更新