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

私は2番目のアプローチを選択します。最初のアプローチは、同じことを行うためのより多くの方法を提供します。これは、APIの冗長性を示しています。

ただし、場合によっては、デフォルト値を持つ必要のあるパラメーターが多すぎるため、オーバーロードされたすべてのバージョンを提供することは現実的ではなく、とにかくユーザーにとって有益ではありません。その場合、パラメータのデフォルト値としてnull引数を受け入れる基本メソッドは1つだけである必要があります。

于 2013-03-15T22:15:09.040 に答える