[英]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.