Java通用运算符

Nom*_*cio 3 java generics

我有以下方法:

  private <E extends Number> double GetAverage(ArrayList<E> al)
  {
    double total = 0;
    Iterator<E> itr = al.iterator();
    while(itr.hasNext())
    {
      total += itr.next();
    }

    return total;
  }
Run Code Online (Sandbox Code Playgroud)

但它没有编译.我得到了

"总不能解决或不是一个领域"

在线

"total + = itr.next();"

我知道Java不知道E的价值,但我希望你理解我的意思,创建一个添加ArrayList的总数(数值)的通用方法的最佳方法是什么.

nic*_*ild 5

您的代码如下所示:

itr.next().
total += itr.next();
Run Code Online (Sandbox Code Playgroud)

编译器正在读取的内容如下:

itr.next().total += itr.next();
Run Code Online (Sandbox Code Playgroud)

编译器建议没有名为total可访问的字段Number.你可能意味着没有这条线:

itr.next().
Run Code Online (Sandbox Code Playgroud)

另一方面,我不确定是否Number会自动取消装入double.您可能需要调用Number#doubleValue()Number实例.

total += itr.next().doubleValue();
Run Code Online (Sandbox Code Playgroud)


use*_*931 5

您的代码实际上存在语法错误,您的行不完整.您的完整代码应该是:

private <E extends Number> double GetAverage(ArrayList<E> al) {
    double total = 0;
    Iterator<E> itr = al.iterator();
    while (itr.hasNext()) {
        E next = itr.next();
        total += next.doubleValue();
    }

    return total;
}
Run Code Online (Sandbox Code Playgroud)

注意:返回'total'而不是undefined retVal