2011-02-17 58 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(); 
}