标志或每个标志可能值的单独方法?

时间:2014-01-30 13:20:41

标签: java

如果你想从某个数组得到负数或正数,那么哪个选项会“更好”:
getAllNumbers(initialArray, boolean positive) ....
要么
getAllPositiveNumbers(initialArray){
....
}
getAllNegativeNumbers(initialArray){
...
}

3 个答案:

答案 0 :(得分:1)

我想使用getAllPositiveNumbersgetAllNegativeNumbers,因为代码更清晰易读,但为客户提供便捷方法可能是合理的。

如果客户端代码必须在运行时选择其中一个方法(因为用户输入)。然后每个客户都必须这样做:

boolean selectPositiveNumber = .....; // obtained somehow through user input
int[] numbers = null;
if(positiveNumbers){
     numbers = getAllPositiveNumbers(allNumbers);
} else {
     numbers = getAllNegativeNumbers(allNumbers);
}

在这种情况下,便捷方法getAllNumbers(initialArray, boolean positive)使客户端代码更容易。

boolean selectPositiveNumber = .....; // obtained somehow through user input
int[] numbers = getAllNumbers(allNumbers, selectPositiveNumber);

如果客户端代码在“编译时”选择其中一个方法。然后客户端不需要方便的方法,例如客户端代码可能会执行以下操作:

public int positiveSum(int[] values){
   int[] positiveNumbers = getPositiveNumbers(values);

   int sum = 0;
   // loop to calc the sum
   return sum;
}

幸运的是,您可以将两者结合起来:

public int[] getAllNumbers(int[] nums, boolean onlyPositiveNums){
    if(onlyPositiveNums){
        return getAllPositiveNumbers(nums);
    } else {
        return getAllNegativeNumbers(nums);
    }
}

因此,如果您期望许多客户端代码执行if/else而不是提供便利方法。

答案 1 :(得分:0)

就个人而言,我会去getAllPositiveNumbers。否则,你需要在getAllNumbers中写下一些评论,以使前者显而易见。

示例

/**
 * Returns numbers from an array.
 * @positive boolean value indicating to get just positive values or not.
 *
 */
 public List<Integer> getAllNumbers(initialArray, boolean positive)
 {
    // Some code.
 }

或者

 public List<Integer> getAllPositiveNumbers(int[] numbers)
 {
   // Some code.
 }

正如你所看到的,最后一个很明显它的作用。

答案 2 :(得分:0)

如果是图书馆或其他什么,我建议同时使用它们。 getAllPositiveNumbers和getAllNegativeNumbers方法可以调用getAllNumbers方法,如下所示:

public int[] getAllNumbers(int[] array, boolean positive) {
    //...
}

public int[] getAllPositiveNumbers(int[] array) {
    return getAllNumbers(array, true);
}

否则请使用您喜欢的任何一种。