java - 使用 Java 在编译时生成代码?

标签 java code-generation compile-time

我已经创建了一组表示 RESTful 资源的类,以及其他实际执行 HTTP 请求以检索和构建对象的辅助工具。 我的类(class)看起来像这样:

class MyResource{
    Attribute id = new Attribute(this, long);
    Attribute name = new Attribute(this, String);
    /* etc */
}

现在碰巧我想使用 POJO 类来插入喜欢处理 POJO 的框架。

我想要这样的代理:

class MyResourceProxy{
    private MyResource realResource;

    public MyResourceProxy(MyResource o){realResource = o;}

    public long getId(){
        return realResource.id.get();
    }

    public void setId(long value){
        realResource.id.set(value);
    }

    public String getName(){
        return realResource.name.get();
    }

    public void setName(String value){
        realResource.name.set(value);
    }        
}

我不想维护那些代理类的代码,而只维护“资源类型”的主类。

我调查了内省(introspection)并发现了有关如何按需生成上述代理代码的提示。 问题是:是否可以在编译时生成代码,然后将其与库一起编译?不过,也许我走错了路,我正在做一些无趣的事情;)

你怎么看? 谢谢!

最佳答案

这取决于你构建的系统是什么,如果你的意思是javac,那么我会说不,但是如果你使用antmaven 那么你可以。

有很多代码生成器的例子。

在您的情况下,我将对已编译的 MyResource 类使用反射。我会考虑使用 Velocity 来帮助模板类。在您的情况下,这可能有点矫枉过正,但随着您生成更多代码,它可能会有用。

关于java - 使用 Java 在编译时生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422828/

相关文章:

java - 用数字命名类的新实例

java - shuffle内存池空闲: SPARK with Java

java - 代码模型 : generic types generation in a loop . 窄()?

c++ - 编译时的 std::experimental::source_location

c++ - C++17如何在编译时检测一个类是否没有虚基类?

java - Java(Swing)如何获取标题栏的高度?

java - Fragment 当前不在 FragmentManager 中

java - 使用 java 来自 XSD 的动态 java bean

c++ - 检测 X11 与 Wayland 的有效方法,最好使用 CMake