是否可以使用groovy ast转换代码来操作java类?
如果是,请举个例子。
如果不是,请说明原因。
答案 0 :(得分:5)
是的,可以将Groovy AST Transformations与Java代码一起使用。 Groovy编译为java字节码并构建在Java库上。两种语言之间的互操作性非常好。
groovy网站上有一整节涵盖了AST Transformations。
以下是混合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")
}
}
执行新的Bar()。otherMethod()将返回'abcdefabcdef'。
答案 1 :(得分:0)
也许。您的第一个问题是找到一个为您提供AST的Java编译器。试试Eclipse编译器;在这里,您只需要将所有类型映射到Groovy AST转换器所期望的类型。鸭子打字会有所帮助,但前提是两个AST包含兼容的信息(我怀疑)。
之后,您需要找到一种方法在生成字节码之前从编译器获取AST,然后将将修改后的AST注入编译器再次得到字节码。
总而言之,可能并非不可能,但需要一些工作。