繁体   English   中英

链接重载方法

[英]Chaining overloaded methods

我有一个带有可选参数的函数,实现为一对重载方法。 此函数调用另一个函数,该函数具有相同的可选参数。 问题是较低级别的函数应该使用默认参数,而较高级别的函数不是:

public void doTask(String arg1, String arg2) {
    // do a bunch of things
    smallstep(arg1, arg2);
    // do another bunch of things
}

public void doTask(String arg1) {
    doTask(arg1, null);
}

public void smallstep(String arg1, String arg2) {
    // do stuff
}

public void smallstep(String arg1) {
    smallstep(arg1, 1);
}

所以基本上问题是doTask函数应该传递1作为参数(或者只用一个参数调用smallstep )如果没有提供第二个参数,但是传递null会调用带有两个参数的那个。

在我的特定情况下,类型比较复杂,这些方法在不同的班级,这样的默认参数smallstep不包含该类可见doTask ,不应该反正。 有没有办法处理这个除了检查arg2 == null并调用相应的函数?

public void doTask(String arg1, String arg2) {
    // do a bunch of things
    if (arg2 == null) {
        smallstep(arg1);
    } else {
        smallstep(arg1, arg2);
    }
    // do another bunch of things
}

这很快就会变得很无聊,对我来说似乎并不优雅......

使用varargs作为可选参数,允许您完全删除重载的实现,同时在调用内部方法时保留原始调用的意图:

public void doTask(String arg1, String... arg2) {
    // do a bunch of things
    smallstep(arg1, arg2);
    // do another bunch of things
}

public void smallstep(String arg1, String... arg2) {
    String arg = arg2.length == 0 ? "some default" : arg2[0];
    // do stuff
}

虽然这允许多个第二个参数,但是可以忽略任何额外的内容(如此代码中所示),或者如果length> 1,则可能抛出IllegalArgumentException

现有的调用代码将与您发布的代码和此代码兼容(无需外部更改)。

请注意,如果调用varargs时没有值,则该方法将其视为空数组(不是null)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM