2011-02-17 57 views
0

我想知道是否有可能以更简单的方式重写Java方法。我的基本问题是我有一组方法,一个例子可以计算一组值的平均值。我的问题是,我想对所有数字变量类型的这种方法的工作(INT长双精度浮点数等)有没有办法做到这一点除了创造:简单的Java重写方法

  1. 每个参数类型
  2. 的新方法让这些新方法调用一个解析参数的基本方法

任何帮助表示赞赏。

在回顾答案时,我注意到我一直在使用泛型,我只是不知道他们被称为什么。这是我的平均片段的一个例子。

public double arithmeticMean(List<Double> data) { 

     double sum = 0; 
     for (double number : data) 
      sum += number; 
     return sum/data.size(); 
    } 

我想知道是否有反正它推广到其他数字变量(除表格上面列出)。

+0

这是如果你想使用原始类型的唯一方法。 – Jeremy 2011-02-17 18:42:14

回答

4

你有没有使用泛型和定义一个新的计算对象DoubleFloatInteger调查等等?

+0

我不能说我有。你能解释一下吗? – 2011-02-17 18:44:03

+0

他**是**使用泛型(否则它会是`List`而不是`List `)。您可能正在谈论一个类型参数。 – 2011-02-18 12:57:42

1

你可以写这样的事情:

public static <T extends Number> BigDecimal getMean(final List<T> numbers) { 
    BigDecimal sum = BigDecimal.ZERO; 

    for (T t : numbers) { 
     sum = sum.add(new BigDecimal(t.doubleValue())); 
    } 

    return sum.divide(new BigDecimal(numbers.size())); 
} 

的用法是:

List<Double> list = new ArrayList<Double>(); 
list.add(1d); 
list.add(5d); 
System.out.println(getMean(list)); // 3 
2

正如Brian说,仿制药将是做到这一点的最好办法。做一个LinkedList的意思(不知道是否有办法做到这一点与阵列或不):

public double mean(LinkedList<? extends Number> numbers) { 
    double sum = 0.0; 
    for(Number n : numbers) sum += n.doubleValue(); 
    return sum/(double)numbers.size(); 
}