我有一个对象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
答案 0 :(得分:2)
尝试
MyObject.metaClass.respondsTo( MyObject, "format", null )
或者
MyObject.metaClass.respondsTo( MyObject, 'format' ).findAll { it.paramsCount == 0 }