如何使用注释在编译时编写带有自定义属性的Java内部类?
例如,我想要这个:
@Generate
class Person {
String firstname, lastname;
}
Run Code Online (Sandbox Code Playgroud)
生成:
class Person {
String firstname, lastname;
public static class $Fields {
public static String firstname = "firstname";
public static String lastname = "lastname";
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何编写界面:
@Retention(RetentionPolicy.SOURCE)
public @interface Generate {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我知道我需要做一些AST转换才能让这个神奇.
我也知道项目lombok,但我想通过一个简单的例子知道最不常见的分母,最好是在一个方法中,最好是一个好的编辑器会自动考虑的东西,例如Javac编译器的RetentionPolicy.SOURCE,可以在Intellij IDEA中使用.
项目lombok是一个明智的野兽代码,是一个艰难的起点.
它必须比那更简单,不是吗?
有任何想法吗?
您可以通过反射来做到这一点,但您的新类不会是内部类;而是内部类。但请注意,您将失去静态类型安全性。
可以分两步完成:
实现类似功能的替代方法也可以通过字节码工具(参见cglib或javassist)或者甚至使用代理来获得。
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |