我想计算任何整数或双精度集合的算术平均值。
我定义了以下方法:
public static double arithmeticMean(Collection<Number> collection) {
for(Number element : collection)
if (element.getClass().isInstance(Integer.class)) {
Collection<Integer> intCollection = new ArrayList<>();
for(Number number : collection)
intCollection.add(number.intValue());
return arithmeticMeanOfIntegers(intCollection);
} else if (element.getClass().isInstance(Double.class)) {
Collection<Double> doubleCollection = new ArrayList<>();
for(Number number : collection)
doubleCollection.add(number.doubleValue());
return arithmeticMeanOfDoubles(doubleCollection);
}
throw new IllegalArgumentException("Method 'arithmeticMean' only operates on integer or double types");
}
为了测试该方法,我创建了一个双精度数组列表,如下所示:
private static ArrayList<Double> dataSet = getDataSet();
private static ArrayList<Double> getDataSet() {
ArrayList<Double> dataSet = new ArrayList<>();
for(int i = 1; i < 21; i++)
dataSet.add(new Double(i));
return dataSet;
}
但是当我像这样调用算术方法时:
public static void main(String[] args) {
System.out.println(arithmeticMean(dataSet));
System.out.println(arithmeticMean((Collection<Number>) dataSet));
}
第一次调用会导致错误:
The method arithmeticMean(Collection<Number>) in the type SimpleStats is not applicable for the arguments (ArrayList<Double>)
第二次调用会导致错误:
Cannot cast from ArrayList<Double> to Collection<Number>
在阅读了关于集合的Oracle Java教程部分之后,我不明白为什么我不能将ArrayList对象传递给需要集合的方法。ArrayList 继承自 Collection,Double 继承自 Number。
有人可以解释一下吗?
德玛西亚99
繁星点点滴滴
相关分类