因此,我需要动态创建(或注入)方法到具有特定返回类型和方法签名的对象中,因为我们正在使用的Java工具将通过Reflection查找此方法并检查{{1} }类型。方法名称将在运行时确定。
使用metaClass。 = {...}然而添加一个闭包,它不会显示为常规方法(即使它可以作为一个方法使用),并且还有一个返回类型。
我无法修改查找代码的方法,也不能识别Groovy。
我不能使用methodMissing()或invokeMethod(),因为该方法需要实际存在。如果我可以重载class.getMethods()我认为这是可能的,但我无法弄清楚如何。
有没有办法在Groovy中执行此操作?
答案 0 :(得分:2)
您可以使用AST Transformations在编译时添加代码,但它不适用于您不编译的类,所以我猜这可能不会工作。
您可以使用基于CGLIB的代理替换该对象。如果您可以更具体地了解相关代码......
编辑:更多信息。除非Java代码明确调用groovyClass.invokeMethod("someMethod",args);
,否则Groovy metaClass magic在Java中不可用。所以没有办法用MetaClasses做你要求的。 CGLIB也许。