2013-05-07 103 views
0

我有一個對象,MyObject,我需要檢查它是否包含方法,如format。我需要檢查這個方法簽名是否沒有參數,或者是否有參數MyType。我沒有看到檢查方法是否響應沒有參數的方法。我曾嘗試以下:Groovy響應無參數方法

if(MyObject.metaClass.respondsTo(MyObject.class, "format")) 
{ ... } 
else if(MyObject.metaClass.respondsTo(MyObject.class, "format", MyType) 
{ ... } 

的問題是,第一,如果檢查結果始終爲true,不管實際方法簽名多少爭論發生在只計算結果爲假,如果方法不存在。以任何形式。

現在我所做的只是重新安排if/else if檢查,以便在無參數檢查之前輸入檢查。這有效,但並不是那麼準確。另一個選項是從respondsTo調用中獲取結果列表,並評估生成的緩存方法是否具有空參數簽名。這也可以起作用,但與其他簽名驗證的容易程度相比似乎過高。

編輯:加入版本 的Grails 1.3.7 的Groovy 1.8

回答

2

嘗試

MyObject.metaClass.respondsTo(MyObject, "format", null) 

或者

MyObject.metaClass.respondsTo(MyObject, 'format').findAll { it.paramsCount == 0 } 
+0

的回報是:'[MyObject.format(的MyType)]'。我還編輯了我的帖子以包含版本號。 Groovy是1.8。 – Joseph 2013-05-07 20:43:57

+0

@約瑟夫增加了不同的可能性 – 2013-05-07 20:53:37

+0

這項工作。它是我一直在努力解決的解決方案。無論如何,我只需要確保在任何地方都使用Util類,這不是一個壞主意。 – Joseph 2013-05-07 21:00:47