在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中存在冗余


但是,在某些情况下,有太多的参数应该具有默认值,提供所有重载版本是不切实际的,而且对用户也没有好处。那么应该只有一个基本方法接受空参数作为参数的默认值。

这取决于具体情况。您是否希望较长的重载支持空引用,并以与其他重载相同的方式进行默认设置?此外,您肯定是指重载,而不是根据标题进行重写。确实如此。我肯定是指超载。打字错误