Java中使用泛型的方法重载和参数

时间:2012-09-04 06:56:23

标签: java generics overloading

我有以下两种方法:

public static double calculateMeanInt(List<Integer> numbers) {
    double sum = 0.0;
    for(Integer number : numbers)
        sum += number;
    return sum/numbers.size();
}

public static double calculateMeanDouble(List<Double> numbers) {
    double sum = 0.0;
    for(Double number : numbers)
        sum += number;
    return sum/numbers.size();
}

你有一个优雅的解决方案(除了使用类型转换和对象),将避免上面的重复代码,并将使用单个方法名称?

1 个答案:

答案 0 :(得分:13)

Java中的每个数字类型都从Number扩展,因此您可以使用有界类型参数(感谢Paul)在一种方法中平均所有数字类型:

  public static <N extends Number> double calculateMean(List<N> numbers) {
    double sum = 0.0;
    for (N number : numbers)
      sum += number.doubleValue();
    return sum / numbers.size();
  }

e.G。那样:

double intMean = calculateMean(Lists.newArrayList(1,2,3,4,5));
double doubleMean = calculateMean(Lists.newArrayList(1d,2d,3d,4d,5d));
double longMean = calculateMean(Lists.newArrayList(1l,2l,3l,4l,5l));

请注意Lists是Guava的一部分。