如何在Java的Number泛型类中计算ArrayList的数字平均值
报错原因与解决方法
你遇到的编译报错核心原因是:Java 不支持对Number类型的泛型实例直接使用+运算符,需要先调用Number类的内置方法把元素转为基础数值类型再参与计算。除此之外你的代码还存在几个隐含问题:
- 循环边界错误:
i <= myarraylist.size()会触发数组下标越界,ArrayList的合法下标范围为0 ~ size()-1,需改为i < myarraylist.size() - 精度缺失风险:用
var average = 0声明变量会被推导为int类型,计算浮点平均值会丢失精度,建议直接声明为double类型 - 缺少返回值:方法声明了返回double类型,现有代码没有返回计算结果
- 除以零风险:如果ArrayList为空,直接除以元素个数会触发算术异常,需要做兼容处理
修正后的完整实现
public double average(){ double sum = 0.0; for (T num : myarraylist) { // 调用Number类的doubleValue方法将泛型元素转为double类型再相加 sum += num.doubleValue(); } // 空列表返回0,否则返回总和除以元素个数的平均值 return myarraylist.isEmpty() ? 0.0 : sum / myarraylist.size(); }
补充说明
Number是Java所有数值包装类(Integer、Long、Float、Double等)的公共父类,内置了doubleValue()、intValue()、longValue()等方法,可将任意数值类型的包装类实例转为对应基础类型的值,此处使用doubleValue()可以最大程度避免平均值计算的精度损失。
内容的提问来源于stack exchange,提问作者Ruben Ferreira
相关产品推荐
相关产品推荐

