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

Recommended way in overloading methods with same signature

我想以不同的方式调用 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 或自定义对象引用类型更好的方法来获取 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,这是预期的行为。