Groovy methodMissing未在没有参数的情况下调用

Groovy methodMissing未在没有参数的情况下调用,groovy,Groovy,我正在使用一组Groovy包装类来访问MongoDB。一个有效的例子是: MyDB db = MyDB.getInstance("testdb") DBResult res = db.users.find([:]) 调用“db.users”时,methodMissing返回CollectionAccessor类的实例,该类被配置为访问“users”集合。调用find()时,CollectionAccessor的methodMissing调用基础Mongo DBCollection上的find,

我正在使用一组Groovy包装类来访问MongoDB。一个有效的例子是:

MyDB db = MyDB.getInstance("testdb")
DBResult res = db.users.find([:])
调用“db.users”时,methodMissing返回CollectionAccessor类的实例,该类被配置为访问“users”集合。调用find()时,CollectionAccessor的methodMissing调用基础Mongo DBCollection上的find,并执行其他有用的功能,如将映射参数转换为所需的BasicDBObject类型。同样,DBResult存储、解释和处理Mongo写入结果、游标和通过CollectionAccessor返回的对象

这一切都很好,但是,我在执行测试用例时发现,当调用它时没有参数,例如:

DBResult res = db.users.find()

CollectionAccessor的methodMissing从未被称为“查找”。返回CollectionAccessor实例,并引发异常,因为试图将其分配给DBResult类。我在调试器中跟踪了它,并确实看到CollectionAccessor的methodMissing for“find”仅在传递空映射参数时才被调用。你知道为什么会这样吗?使用Groovy 2.3.6

DefaultGroovyMethods
已注入所有对象定义
find()
。你必须覆盖它

公共静态对象查找(对象自身)

查找与
标识
闭包匹配的第一项(即匹配Groovy truth)

关于
DefaultGroovyMethods

此类定义了groovy环境中普通JDK类上出现的新groovy方法。使用静态方法时,第一个参数是目标类,即
公共静态字符串反转(字符串自身)
字符串提供
反转()方法


谢谢我检查了GroovyObject以确保情况并非如此,但错过了默认方法。