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

时间:2015-09-07 05:05:48

标签: groovy overloading

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

send( 'a', 'b', 'c', 'd' )
send( 'a', 'c', 'd' )
send( 'b', 'c', 'd' )
send( 'c', 'd' )

我有:

void send ( String aStr = null, String bStr = null, String cStr, String dStr )

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

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

1 个答案:

答案 0 :(得分:2)

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

在你的情况下,你至少有两种情况,其中参数的数量是相同的(3),并且参数的类型是相同的(例如String)。

问题是:如何表明您是否需要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,这是预期的行为。