我有一个像这样的绝妙方法
def createMyObj(id,instanceId,isValid) {
def myObj = new SomeObj()
myObj.setId(id)
myObj.setInstanceId(instanceId)
myObj.isValid(isValid)
myObj
}
当我在测试中明确执行此操作时,我对此进行了测试,它工作得很好。
def testObj = createMyObj(10,20,true)
当我尝试使用这样的命名参数时。
def testObj = createMyObj(id:10,instanceId:20,isValid:true)
它给了我这个例外
No signature of method:createMyObj is applicable for argument types: (java.util.LinkedHashMap) values [[id:10, instanceId:20,..]]
我去了这个page http://groovy.codehaus.org/Extended+Guide+to+Method+Signatures为了进一步理解这个概念,我看到了这段代码片段。
的情况下def foo(T t, p1, p2, ..., pn)
所有命名参数都将位于 t 中,但这也意味着您无法在通过名称访问 pi 的情况下进行方法调用。例子
def foo(x,y){}
foo(x:1,y:2)
这段代码将在运行时失败,因为方法 foo 需要两个参数,但您给出的映射只有一个参数。
我不确定这是否是我面临的错误的原因。如果它需要两个参数,就像它说我缺少的参数是什么或者我如何传递第二个参数?