2012-09-04 16 views
6

におけるジェネリック医薬品との引数:メソッドのオーバーロードとJava

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(); 
} 

あなたは上記のコードの重複を避けることができますし、使用します(型鋳造やオブジェクトを使用するよりも、他の)エレガントな解決策を持っていますか単一のメソッド名?

答えて

13

使用すると、1つの方法ですべてのあなたの番号の種類を平均化するために有界型パラメータ(おかげでポール)を使用できるようにするJavaの各数値型は、Numberから延び:

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(); 
    } 

例えばそのように:

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はグアバの一部です。

+2

+1いい回答です。 Nitpick:これは限定された[*型パラメータ*](http://docs.oracle.com/javase/tutorial/extra/generics/methods.html) - 有界[ワイルドカード](http://docs.oracle.com/)です。 com/javase/tutorial/extra/generics/wildcards.html)は 'List <? Number> numbers'を拡張します(この場合、同じ動作をします)。 –

+0

@PaulBelloraあなたは正しいです、修正されました。ありがとう;) –

関連する問題