次のような方法を検討してください。ユーザーは 30D、90D、180D、360D、1M、3M、6M、12M、1Y (D =日、M =月、Y =年)のようなものを入力できます。Javaのcall-by-valueを「悪用する」ことは賢明でしょうか
次の2つの方法で月数を計算します。 Javaは値として渡された参照して、コールバイ値で動作しますので
private int getLengthOfPeriodInMonths(Integer lengthOfPeriod, String unitOfPeriod) {
int periodInMonths = lengthOfPeriod;
if ("D".equals(unitOfPeriod)) {
periodInMonths = lengthOfPeriod/30;
} else if ("Y".equals(unitOfPeriod)) {
periodInMonths = lengthOfPeriod * 12;
}
return periodInMonths;
}
private int getLengthOfPeriodInMonths(Integer lengthOfPeriod, String unitOfPeriod) {
if ("D".equals(unitOfPeriod)) {
lengthOfPeriod = lengthOfPeriod/30;
} else if ("Y".equals(unitOfPeriod)) {
lengthOfPeriod = lengthOfPeriod * 12;
}
return lengthOfPeriod;
}
lengthOfPeriod
方法の外に変更されません。私は使用するのがより適切であるか分かりません。
このメソッドは、enum Periods
などを使用してリファクタリングできます。しかしここでこれについて議論してはいけません。
はあなたがここで起こることになっているかを説明できます。私は、デフォルト値が含まれるように、ローカル変数を導入するよりもはるかに明確に次のような方法
を見つけますか? – SomeJavaGuy
コードを明確にするかどうかを指定します。私にとって、彼らはどちらも大丈夫です。 – khelwood
私は1つの一般的な問題があると思います:プログラマは2番目のメソッドでlengthOfPeriod(setterによる)を変更する可能性があり、このメソッドの外部でコードが変更される可能性があります。 – Chris311