是否可以使用groovy ast转换代码来操作java类?如果是,请举例说明。如果没有,请说明原因。
ryevplcw1#
也许 吧。您的第一个问题是找到一个java编译器,它为您提供ast。试试eclipse编译器;在这里,您只需将所有类型Map到groovy ast transformer所期望的类型。duck类型将有所帮助,但前提是两个ast包含兼容的信息(我对此表示怀疑)。之后,您需要找到一种方法,在生成字节码之前从编译器中获取ast,然后将修改后的ast再次注入编译器中以获取字节码。总而言之,可能不是不可能,但这需要一些工作。
htzpubme2#
是的,在java代码中使用groovy-ast转换是可能的。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()将返回'defdefdef'。
2条答案
按热度按时间ryevplcw1#
也许 吧。您的第一个问题是找到一个java编译器,它为您提供ast。试试eclipse编译器;在这里,您只需将所有类型Map到groovy ast transformer所期望的类型。duck类型将有所帮助,但前提是两个ast包含兼容的信息(我对此表示怀疑)。
之后,您需要找到一种方法,在生成字节码之前从编译器中获取ast,然后将修改后的ast再次注入编译器中以获取字节码。
总而言之,可能不是不可能,但这需要一些工作。
htzpubme2#
是的,在java代码中使用groovy-ast转换是可能的。groovy编译成java字节码并构建在java库的基础上。这两种语言之间的互操作性非常好。
groovy站点上有一个完整的部分介绍了ast转换。
下面是一个混合java/groovy应用程序的示例。您有一个标准的java接口和实现。groovy类使用@delegate ast转换,还使用invokemethod。
java类:
groovy类:
执行new bar().othermethod()将返回'defdefdef'。