如何使用注解在编译时编写带有自定义属性的 Java 内部类?
例如,我想要这个:
@Generate
class Person {
String firstname, lastname;
}
生成:
class Person {
String firstname, lastname;
public static class $Fields {
public static String firstname = "firstname";
public static String lastname = "lastname";
}
}
如何编写接口(interface):
@Retention(RetentionPolicy.SOURCE)
public @interface Generate {
// ...
}
我知道我需要进行某种 AST 转换才能使它变得神奇。
我也知道 lombok 项目,但我想知道一个简单示例的最小公分母是什么,最好是在一个方法中,最好是一个好的编辑器会自动考虑的东西,例如 RetentionPolicy。 javac编译器的SOURCE,可以在Intellij IDEA中使用。
lombok 项目是一个野兽代码明智的,是一个很难开始的地方。
它一定比那更简单,不是吗?
有什么想法吗?
最佳答案
您可以通过反射来做到这一点,但是您的新类不会是内部类;但请注意,您将失去静态类型安全性。
可以分两步完成:
- 通过反射读取带注释的类,并将其转换为表示新类源代码的字符串。
- 将此字符串写入文件,使用 Java 编译器 API 编译此字符串,然后以编程方式加载和实例化新类;见exact steps here .
实现类似功能的替代方法也可以通过字节码检测(参见 cglib 或 javassist )或什至使用 proxies 获得。 .
关于Java:在编译时使用注释生成自定义 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004012/