1

我经常发现自己有这样的方法签名:

public returnType doStuff(mandatoryParam, calculableParam1, calculableParam2); 

在这些情况下,我有时想支持这些不同的方法签名:

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){
    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); 
}
4

1 回答 1

2

我会选择第二种方法。第一种方法提供了更多方法来做同样的事情,这表明 API 中存在冗余。

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

于 2013-03-15T22:15:09.040 回答