在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中「使用」關鍵字/方法的用法是什麼?
沒有你不能。你需要使用反射 –