从Groovy方法闭包中获取方法

时间:2016-02-28 01:58:44

标签: reflection groovy

在groovy中,.&运算符转换闭包中的方法。在Java中使用反射Method对象,可以获取方法名称,参数名称和类型。有没有办法从闭包中获取所有方法反射信息?到目前为止,我只能获取参数类型(通过closure.parameterTypes

2 个答案:

答案 0 :(得分:2)

当你从一个方法创建一个闭包时,你并没有真正链接一个java.lang.Method而只是一个名字:如果你有不同的方法具有相同的名称,但不同的参数,它将起作用。

当您使用参数调用闭包时,groovy尝试查找适合参数的最佳方法(通常在Groovy中)。

因此,您无法从闭包中获得Method,但您可以获得名称:

def closure = instance.@myMethod
assert "myMethod" == closure.method

然后,您可以从owner类中找到所有可能的方法:

def methods = closure.owner.metaClass.respondsTo(closure.owner, closure.method)

答案 1 :(得分:1)

不是直接来自Email - This field is required. ,但您可以从Closure 获取Method

Closure

。& operator返回MethodClosure,它维护对import java.lang.reflect.Method class Person { def firstName def lastName def getFullName() { "$firstName $lastName" } } Person person = new Person(firstName: 'John', lastName: 'Doe') Closure closure = person.&getFullName Method method = closure.owner.class.getMethod('getFullName') assert person.fullName == closure() assert person.fullName == method.invoke(person) 属性中实例的引用。所以你可以从那里到owner,然后到Class