java - 使用反射生成的 Java 源代码

标签 java templates reflection eclipse-jet

在我的 Java 应用程序中我有一个类 Foo

class Foo {
  String field1;
  String field2;
}

我想要一些生成的代码,在这个类的字段上使用反射 (虚构的模板语言)

#for each Field $f in Foo.class.getDeclaredFields()
  #writeFile $f.java
    public @interface $f {
    }

最终目标是让 Field1.java 和 Field2.java 在每个内部都有一个简单的@interface 定义。

是否有可用的模板语言可以将生成作为 Maven 构建过程的一部分?

我能找到的最接近的是 JET ,但这个项目似乎更适合生成在运行时可用的 Java 源代码,而不是在编译时。理论上,我可能可以使用 AntRun 以及几个 Javac 和 Java 任务来完成这项工作,但这会很麻烦。

我需要它的实际用例是生成 BindingAnnotations适用于 Google Guice(将在 GWT 源代码中使用,因此它们在编译时必须作为 .java 文件存在)。

最佳答案

我会在这里建议两个选项:

  1. Apache Velocity:它提供了一种看起来与您所描述的很接近的模板语言。调查一下here .您可能会对他们的引擎感兴趣。

  2. GWTP 似乎在做一些类似于您想要做的事情。看起来他们正在使用注释处理器来执行代码生成。这是一个processor example他们的项目主页是 here .

关于java - 使用反射生成的 Java 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10293565/

相关文章:

C# 获取启动项目的程序集名称

c# - WP7.1 上的匿名类型和获取访问器?

c# - 如何从 C# (2.0) 中的属性获取属性的名称

java - iMacros 框架名称疑难解答

java 在屏幕上打印数组列表元素,但等待用户按 Enter 打印下一个

c++是在参数化构造函数中调用的默认构造函数吗?

C++ 模板函数无匹配调用

c++ - 模板令人费解......需要帮助(除了美沙酮)

java - HashMap 的值中的泛型类型 ("List<? extends> ")

java - 如何使用字符串作为参数来表示 Java 中的对象?