Groovy:动态添加具有特定签名的方法

时间:2010-03-31 18:26:13

标签: java dynamic groovy

因此,我需要动态创建(或注入)方法到具有特定返回类型和方法签名的对象中,因为我们正在使用的Java工具将通过Reflection查找此方法并检查{{1} }类型。方法名称将在运行时确定。

使用metaClass。 = {...}然而添加一个闭包,它不会显示为常规方法(即使它可以作为一个方法使用),并且还有一个返回类型。

我无法修改查找代码的方法,也不能识别Groovy。

我不能使用methodMissing()或invokeMethod(),因为该方法需要实际存在。如果我可以重载class.getMethods()我认为这是可能的,但我无法弄清楚如何。

有没有办法在Groovy中执行此操作?

1 个答案:

答案 0 :(得分:2)

您可以使用AST Transformations在编译时添加代码,但它不适用于您不编译的类,所以我猜这可能不会工作。

您可以使用基于CGLIB的代理替换该对象。如果您可以更具体地了解相关代码......

编辑:更多信息。除非Java代码明确调用groovyClass.invokeMethod("someMethod",args);,否则Groovy metaClass magic在Java中不可用。所以没有办法用MetaClasses做你要求的。 CGLIB也许。