在Java中重载方法时,在哪里计算额外的参数数据?
我经常发现自己的方法签名如下:在Java中重载方法时,在哪里计算额外的参数数据?,java,parameters,overloading,optional-parameters,Java,Parameters,Overloading,Optional Parameters,我经常发现自己的方法签名如下: public returnType doStuff(mandatoryParam, calculableParam1, calculableParam2); public returnType doStuff(mandatoryParam){ doStuff(mandotryParam, null, null) } public returnType doSTuff(mandatoryParam, calculable1, calculable2){
public returnType doStuff(mandatoryParam, calculableParam1, calculableParam2);
public returnType doStuff(mandatoryParam){
doStuff(mandotryParam, null, null)
}
public returnType doSTuff(mandatoryParam, calculable1, calculable2){
if(null == calculable1){
calculable1 = calculate();
}
.
.
.
}
public returnType doStuff(mandatoryParam){
Calculable calc1 = figureItOut1();
Calculable calc2 = figureItOut2();
doStuff(mandotryParam, calc1, calc2);
}
在这些情况下,我有时希望支持这些不同的方法签名:
public returnType doStuff(mandatoryParam);
public returnType doStuff(mandatory, calculable1);
public returnType doStuff(mandatory, calculable2);
public returnType doStuff(mandator, calculable1, calculable2);
在这样进行重载时,让重载像这样将null传递给基方法是否更好:
public returnType doStuff(mandatoryParam, calculableParam1, calculableParam2);
public returnType doStuff(mandatoryParam){
doStuff(mandotryParam, null, null)
}
public returnType doSTuff(mandatoryParam, calculable1, calculable2){
if(null == calculable1){
calculable1 = calculate();
}
.
.
.
}
public returnType doStuff(mandatoryParam){
Calculable calc1 = figureItOut1();
Calculable calc2 = figureItOut2();
doStuff(mandotryParam, calc1, calc2);
}
还是最好先计算可计算的参数,然后将其传递给基本方法,如下所示:
public returnType doStuff(mandatoryParam, calculableParam1, calculableParam2);
public returnType doStuff(mandatoryParam){
doStuff(mandotryParam, null, null)
}
public returnType doSTuff(mandatoryParam, calculable1, calculable2){
if(null == calculable1){
calculable1 = calculate();
}
.
.
.
}
public returnType doStuff(mandatoryParam){
Calculable calc1 = figureItOut1();
Calculable calc2 = figureItOut2();
doStuff(mandotryParam, calc1, calc2);
}
我会选择第二种方法。第一种方法提供了更多的方法来做同样的事情,这表明API中存在冗余
但是,在某些情况下,有太多的参数应该具有默认值,提供所有重载版本是不切实际的,而且对用户也没有好处。那么应该只有一个基本方法接受空参数作为参数的默认值。这取决于具体情况。您是否希望较长的重载支持空引用,并以与其他重载相同的方式进行默认设置?此外,您肯定是指重载,而不是根据标题进行重写。确实如此。我肯定是指超载。打字错误