2

是否可以使用 groovy ast 转换代码来操作 java 类?

如果是,请举个例子。

如果否,请说明原因。

4

2 回答 2

5

是的,可以将 Groovy AST 转换与 Java 代码一起使用。Groovy 编译为 Java 字节码并构建在 Java 库之上。两种语言之间的互操作性很好。

groovy 网站上有一个完整的部分涵盖了AST 转换

这是一个混合 Java/Groovy 应用程序的示例。您有一个标准的 Java 接口和实现。groovy 类使用@Delegate AST 转换,也使用invokeMethod。

Java 类:

interface IFoo {
    public String someMethod(String arg1);
}

class Foo implements IFoo {
    public String someMethod(String arg1) { 
        arg1+arg1;
    }
}

Groovy 类:

class Bar implements IFoo {
    @Delegate Foo foo = new Foo()
    def otherMethod() {
        someMethod("abcdef")
    }
}

执行 new Bar().otherMethod() 将返回“abcdefabcdef”。

于 2009-11-05T13:45:42.947 回答
0

也许。您的第一个问题将是找到一个为您提供 AST 的 Java 编译器。试试 Eclipse 编译器;在这里,您只需将所有类型映射到 Groovy AST 转换器所期望的类型。鸭子打字会有所帮助,但前提是两个 AST 包含兼容的信息(我对此表示怀疑)。

之后,您需要在生成字节码之前找到一种从编译器获取 AST 的方法,然后将修改后的 AST 再次注入编译器以获取字节码。

总而言之,可能并非不可能,但这需要一些工作。

于 2009-11-02T14:14:23.077 回答