我有一个对象,MyObject
我需要检查它是否包含一个方法,比如说format
。我需要检查这个方法签名是否没有参数,或者它是否有一个MyType
. 我看不到检查方法是否响应无参数的方法。我尝试了以下方法:
if(MyObject.metaClass.respondsTo(MyObject.class, "format"))
{ ... }
else if(MyObject.metaClass.respondsTo(MyObject.class, "format", MyType)
{ ... }
问题是第一个 if 检查总是评估为真,无论实际方法签名接受多少参数。如果方法不以任何形式存在,它只会评估为假。
现在我所做的只是重新安排 if/else if 检查,以便类型检查在无参数检查之前进行。这行得通,但并不是那么准确。另一种选择是从 respondsTo 调用中获取结果列表并评估结果缓存方法是否具有空参数签名。这也可行,但与其他签名验证的容易程度相比似乎有些过分。
编辑:添加版本 Grails 1.3.7 Groovy 1.8