为了详细说明蛋白石的答案:有两个部分,并在docs一个注脚相关这里:
如果封闭声明了一个无类型的参数,它就会通过 方法的参数列表:
而且
在大多数情况下,这将是更方便的到直达方法的参数。如果封闭声明不止一个参数或 单一类型化的参数多,方法的参数将被映射一个接一个 到闭合参数[脚注]:
脚注:
解构语义关闭参数直接来自 Groovy。
问题是你有一个单一的参数列表,并且由于泛型被删除,groovy不能决定你实际上想打开列表。
所以一个非List
参数正常工作:
myDomainObjectRepository.save(_) >> { MyDomainObject myDomainObject ->
assert myDomainObject == new MyDomainObject(someId, someData)
}
或List
参数与第二组合,例如save(List domain, boolean flush)
myDomainObjectRepository.save(_, _) >> { List<MyDomainObject> myDomainObjects, boolean flush ->
assert myDomainObjects == [new MyDomainObject(someId, someData)]
}
因此,文档是有点误导这个边缘情况。我担心你在这个案子中被强制执行。
编辑:如果你这样做,你应该能够摆脱IDE警告。
myDomainObjectRepository.save(_) >> { List<List<MyDomainObject>> arguments ->
List<MyDomainObject> myDomainObjects = arguments[0]
assert myDomainObjects == [new MyDomainObject(someId, someData)]
}
我刚刚添加了一种让IDE高兴的方式,请参阅编辑。 –