在groovy中,.&
运算符在闭包中转换方法。在使用反射Method对象的Java中,可以获取方法名称,参数名称和类型。有没有办法从闭包中获得所有的方法反射信息?我只能够得到的参数类型至今(通过closure.parameterTypes
)从Groovy方法关闭中获取方法
1
A
回答
1
当您通过Method创建闭包时,您并不真正链接java.lang.Method
,但只有一个名称:如果您有不同的方法具有相同的名称,但参数不同,它将起作用。
当您使用参数调用闭包时,groovy会尝试查找适合参数的最佳方法(如Groovy中一样)。
所以,你不能从一个封闭一个Method
,但你可以得到名称:
def closure = [email protected]
assert "myMethod" == closure.method
然后,您可以找到从owner
类的所有可能的方法:
def methods = closure.owner.metaClass.respondsTo(closure.owner, closure.method)
+0
groovy编译器支持-parameters选项吗? – Antonio
1
不是直接从Closure
,但你可以从的Closure
的Method
:
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)
的。 &运算符返回MethodClosure,该值保留对owner
属性中实例的引用。所以你可以从那里去,到Class
,最后到Method
。
相关问题
- 1. 如何编写相关方法/关闭“Groovy”方法?
- 2. Groovy:闭包或方法
- 3. 方法不关闭
- 4. 更好的方法从表中获取整个数据Groovy Sql
- 5. Groovy无法通过关闭
- 6. 从静态方法关闭窗体
- 7. 称为超类方法的Groovy类,用于访问关闭
- 8. 如何从groovy获取testStep的HTTP/REST方法类型
- 9. Spark的方法关闭
- 10. 从方法获取变量
- 11. 获取方法
- 12. MissingMethodException在Groovy:方法
- 13. Groovy Eclipse Stubbed方法
- 14. 获取/关闭DataSource连接的正确方法
- 15. 无法从远程方法获取值
- 16. 无法从GET方法获取价值
- 17. 如何从该方法中获取方法名称?
- 18. 如何从另一个文件中获取方法undefined方法
- 19. 从Web方法中调用异步方法并获取返回
- 20. 从express方法中获取POST方法的值
- 21. 消费WCF方法 - 中止/关闭
- 22. 挂钩Quartz.net中的关闭方法
- 23. 在jQuery“ajax”中关闭工作方法
- 24. 无法从Android开关组件的onClicked方法中获取关联的TextView值
- 25. 从java中的方法名获取IMethod
- 26. 从方法中获取类名
- 27. 从文本框中获取textbox_Leave方法
- 28. 从MyTableViewController中的方法'viewDidLoad'获取MyTableViewCell?
- 29. 从as3中的方法获取对象
- 30. groovy中“使用”关键字/方法的用法是什么?
没有你不能。你需要使用反射 –