Groovy默认方法参数

Groovy默认方法参数,groovy,overloading,Groovy,Overloading,如何调用下面的方法def来只传递interactionId、transactionId、awResponseFile、testMethodName和expectedNumberOfConsumers 方法定义 方法调用 例外情况 当您包含一个map entry key:value时,它们会被自动收集,放入hashmap并作为第一个参数传递。Groovy目前没有命名参数。对于这种特定情况,我认为您最好使用该方法的映射: def verifyPersistence(Map map) { Stri

如何调用下面的方法def来只传递interactionId、transactionId、awResponseFile、testMethodName和expectedNumberOfConsumers

方法定义

方法调用

例外情况


当您包含一个map entry key:value时,它们会被自动收集,放入hashmap并作为第一个参数传递。Groovy目前没有命名参数。对于这种特定情况,我认为您最好使用该方法的映射:

def verifyPersistence(Map map) {
  String interactionId = map.interactionId
  String transactionId = map.transactionId
  File rawResponseFile = map.rawResponseFile
  String testMethodName = map.testMethodName
  int expectedNumberOfDatasourceProductResponseRaws = map.expectedNumberOfDatasourceProductResponseRaws ?: 1
  String dsProductName = map.dsProductName ?: datasourceSpec['creditreport.name']
  int expectedNumberOfDatasourceProductResponses = map.expectedNumberOfDatasourceProductResponses ?: 1
  int expectedNumberOfConsumers = map.expectedNumberOfConsumers ?: 1
  int expectedNumberOfAddresses = map.expectedNumberOfAddresses ?: 1
}


verifyPersistence(
  interactionId : interactionId.persistedVersion(), 
  transactionId : transactionId, 
  rawResponseFile : results, 
  expectedNumberOfDatasourceProductResponseRaws : 14, 
  expectedNumberOfConsumers:8
)

显然,您不需要将每个参数都赋给变量,只需使用map.field语法即可。如果您希望对其进行类型检查,那么我认为最好使用对象来封装参数。

当您包含map entry key:value时,它们会自动收集,放入hashmap并作为第一个参数传递。Groovy目前没有命名参数。对于这种特定情况,我认为您最好使用该方法的映射:

def verifyPersistence(Map map) {
  String interactionId = map.interactionId
  String transactionId = map.transactionId
  File rawResponseFile = map.rawResponseFile
  String testMethodName = map.testMethodName
  int expectedNumberOfDatasourceProductResponseRaws = map.expectedNumberOfDatasourceProductResponseRaws ?: 1
  String dsProductName = map.dsProductName ?: datasourceSpec['creditreport.name']
  int expectedNumberOfDatasourceProductResponses = map.expectedNumberOfDatasourceProductResponses ?: 1
  int expectedNumberOfConsumers = map.expectedNumberOfConsumers ?: 1
  int expectedNumberOfAddresses = map.expectedNumberOfAddresses ?: 1
}


verifyPersistence(
  interactionId : interactionId.persistedVersion(), 
  transactionId : transactionId, 
  rawResponseFile : results, 
  expectedNumberOfDatasourceProductResponseRaws : 14, 
  expectedNumberOfConsumers:8
)

显然,您不需要将每个参数都赋给变量,只需使用map.field语法即可。如果希望对其进行类型检查,则我认为最好使用对象来封装参数。

是否无法将其他参数传递为null?@iberbeu否。其他参数仍应采用方法def中提供的默认值。你知道我做错了什么吗?看起来第一个参数应该是字符串,但你正在引入LinkedHashMap。你确定interactionId.persistedVersion返回的是字符串而不是LinkedHashMap吗?其他参数不能作为null传递?@iberbeu否。其他参数仍应采用该方法中提供的默认值def。你知道我做错了什么吗?看起来第一个参数应该是字符串,但你正在引入LinkedHashMap。你确定interactionId.persistedVersion返回的是字符串而不是LinkedHashMap吗?map参数的问题是,你失去了代码完成、类型检查和记录参数的标准方式。如果不使用难看的模式,您就不能拥有默认键,如果您键入了一个键名,您也不会得到任何警告。@ddimitrov,当然,这是键->值映射上的一个语法糖。对于类型检查和自动完成,我建议使用一个类来指定参数,比如:parsenew Paramhost:10.1.1.1,port:9000映射参数的问题是,您失去了代码完成、类型检查和记录参数的标准方式。如果不使用难看的模式,您就不能拥有默认键,如果您键入了一个键名,您也不会得到任何警告。@ddimitrov,当然,这是键->值映射上的一个语法糖。对于类型检查和自动完成,我建议使用一个类来指定参数,比如:parsenewparamhost:10.1.1.1,port:9000
groovy.lang.MissingMethodException: No signature of method: verifyPersistence() is applicable for argument types: (java.util.LinkedHashMap, java.lang.String, java.lang.String, java.io.File, java.lang.String) values: [[expectedNumberOfConsumers:8], 3130001030065, 10003000000890059, C:\results, multiple consumers contracts]
Possible solutions: 

verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String), 
verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int), 
verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int, java.lang.String), 
verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int, java.lang.String, int), verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int, java.lang.String, int, int)
    at HitmultipleconsumersPersistSpec.groovy:151)
def verifyPersistence(Map map) {
  String interactionId = map.interactionId
  String transactionId = map.transactionId
  File rawResponseFile = map.rawResponseFile
  String testMethodName = map.testMethodName
  int expectedNumberOfDatasourceProductResponseRaws = map.expectedNumberOfDatasourceProductResponseRaws ?: 1
  String dsProductName = map.dsProductName ?: datasourceSpec['creditreport.name']
  int expectedNumberOfDatasourceProductResponses = map.expectedNumberOfDatasourceProductResponses ?: 1
  int expectedNumberOfConsumers = map.expectedNumberOfConsumers ?: 1
  int expectedNumberOfAddresses = map.expectedNumberOfAddresses ?: 1
}


verifyPersistence(
  interactionId : interactionId.persistedVersion(), 
  transactionId : transactionId, 
  rawResponseFile : results, 
  expectedNumberOfDatasourceProductResponseRaws : 14, 
  expectedNumberOfConsumers:8
)