0

我有一个对象,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

4

1 回答 1

2

尝试

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

或者

MyObject.metaClass.respondsTo( MyObject, 'format' ).findAll { it.paramsCount == 0 }
于 2013-05-07T20:41:33.937 回答