2013-05-07 104 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