Groovy响应没有参数方法

时间:2013-05-07 20:36:07

标签: groovy metaclass

我有一个对象MyObject,我需要检查它是否包含方法,比如format。我需要检查此方法签名是否没有参数,或者它是否具有MyType参数。我没有看到一种检查方法是否响应没有参数的方法。我尝试过以下方法:

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

问题在于,无论实际方法签名采用多少个参数,第一个if check总是求值为true。如果方法不存在于任何形式,它只会求值为false。

现在我所做的只是重新安排if / else if检查,以便在无参数检查之前进行类型化检查。这是有效的,但并不是那么准确。另一个选项是从respondsTo调用中获取结果列表,并评估生成的Cached方法是否具有空参数签名。这也可以,但与其他签名验证相比,它似乎过于简单。

编辑:添加版本 Grails 1.3.7 Groovy 1.8

1 个答案:

答案 0 :(得分:2)

尝试

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

或者

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