是否可以使用 groovy ast 转换代码来操作 java 类?
如果是,请举个例子。
如果否,请说明原因。
是的,可以将 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”。
也许。您的第一个问题将是找到一个为您提供 AST 的 Java 编译器。试试 Eclipse 编译器;在这里,您只需将所有类型映射到 Groovy AST 转换器所期望的类型。鸭子打字会有所帮助,但前提是两个 AST 包含兼容的信息(我对此表示怀疑)。
之后,您需要在生成字节码之前找到一种从编译器获取 AST 的方法,然后将修改后的 AST 再次注入编译器以获取字节码。
总而言之,可能并非不可能,但这需要一些工作。