如何在 Java 中的通用 class 数字中找到数字的平均值?

How to find the average of numbers in a generic class of Numbers in Java?

我创建了一个通用的 class,它创建了 Numbers

ArrayList
public class MyMathClass<T extends Number> {
private ArrayList<T> myarraylist;

public MyMathClass(ArrayList<T> arrayList){
    myarraylist = arrayList;
}

我试图创建一个基本上计算给定 ArrayList 的平均值的方法

public double average(){
    var average = 0;
    for(int i = 0 ; i <= myarraylist.size(); i++){
        average += myarraylist.get(i);
    }
}

但是当尝试将平均值与索引 i 处的值相加时,我收到此错误:“运算符 + 不能应用于 'int' ,'T'

相对于未装箱类型和盒装类型。

参考这里了解更多详情:What does it mean to say a type is "boxed"?

要使您的代码正常工作,只需将 Number 转换为 double 并对其求和。

Number num = myarraylist.get(i);
average += num == null ? 0 : num.doubleValue();

Number 对象实现了 doubleValue() 方法。 Return 平均数:

public double average() {
    return myarraylist.stream().mapToDouble(Number::doubleValue).average().orElse(0);
}

orElse(0) 处理列表为空。


风格说明:尽可能使用抽象类型,所以更喜欢:

private List<T> myList;

public MyMathClass(List<T> list){
    myList = list;
}

参见 Liskov substitution principle