Java泛型并将数字加在一起

Dav*_*Coe 9 java generics

我想在java中一般添加数字.我遇到了困难,因为Numbers类并不真正支持我想做的事情.到目前为止我尝试过的是:

public class Summer<E extends Number> {


    public E sumValue(List<E> objectsToSum) {
        E total = (E) new Object();
        for (E number : objectsToSum){
            total += number;
        }
        return null;

    }
Run Code Online (Sandbox Code Playgroud)

显然这不起作用.我该如何去有关更正此代码,所以我可以给出一个列表<int>或者<long>或任何与返回的总和?

das*_*ght 14

为了一般地计算总和,您需要提供两个动作:

  • 一种总计零项的方法
  • 一种方法来总结两个项目

在Java中,您可以通过界面完成.这是一个完整的例子:

import java.util.*;

interface adder<T extends Number> {
    T zero(); // Adding zero items
    T add(T lhs, T rhs); // Adding two items
}

class CalcSum<T extends Number> {
    // This is your method; it takes an adder now
    public T sumValue(List<T> list, adder<T> adder) {
        T total = adder.zero();
        for (T n : list){
            total = adder.add(total, n);
        }
        return total;
    }
}

public class sum {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(4);
        list.add(8);
        CalcSum<Integer> calc = new CalcSum<Integer>();
        // This is how you supply an implementation for integers
        // through an anonymous implementation of an interface:
        Integer total = calc.sumValue(list, new adder<Integer>() {
            public Integer add(Integer a, Integer b) {
                return a+b;
            }
            public Integer zero() {
                return 0;
            }
        });
        System.out.println(total);
    }
}
Run Code Online (Sandbox Code Playgroud)