Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 重载具有相同签名的方法的推荐方法_Groovy_Overloading - Fatal编程技术网

Groovy 重载具有相同签名的方法的推荐方法

Groovy 重载具有相同签名的方法的推荐方法,groovy,overloading,Groovy,Overloading,我想以不同的方式调用send方法: send( 'a', 'b', 'c', 'd' ) send( 'a', 'c', 'd' ) send( 'b', 'c', 'd' ) send( 'c', 'd' ) 我有: 无效发送(字符串aStr=null,字符串bStr=null,字符串cStr,字符串dStr) 我知道调用send('b','c','d')的意图将使用重载签名send(String aStr,String cStr,String dStr)而不是send(String bSt

我想以不同的方式调用
send
方法:

send( 'a', 'b', 'c', 'd' )
send( 'a', 'c', 'd' )
send( 'b', 'c', 'd' )
send( 'c', 'd' )
我有:

无效发送(字符串aStr=null,字符串bStr=null,字符串cStr,字符串dStr)

我知道调用
send('b','c','d')
的意图将使用重载签名
send(String aStr,String cStr,String dStr)
而不是
send(String bStr,String cStr,String dStr)
签名


解决这个问题的理想方法是什么?有没有比使用映射或自定义对象引用类型更好的方法来获取
send('b','c','d')

重载依赖于这样一个事实,即具有相同名称的两个方法可以通过参数的数量和类型来区分

但是,在您的情况下,您至少有两种情况,即参数的数量相同(3)且参数的类型相同(例如字符串)

问题是:如何表明您是想要
send('a','c','d')
还是
send('b','c','d')

我建议通过传递对象并在方法中定义变量来调用方法

def send(obj){
    def a = obj.a
    def b = obj.b
    def c = obj.c
    def d = obj.d

    println a //a
    println b //b
    println c //null
    println d //d
}

myMethod([a:'a',b:'b',d:'d']);

这样,您发送的对象就是一个
LinkedHashMap
。如果您试图检索一个不在映射中的值(例如,
obj.c
),您将得到
null
,这是预期的行为。

开始参数的默认值似乎很奇怪,这是否按照您的要求工作?在Groovy中,对于可变数量的参数,尤其是方法算法中已知的参数名称,使用Map是正统的。我在评论时失去了重要的想法,更正:Map是一种给出命名参数的方法。在内部以不同的方式访问它们+1重载依赖于一个事实,即具有相同名称的两个方法可以通过参数的数量和类型来区分。