Java:通用方法和数字

时间:2010-10-03 18:18:34

标签: java generics numbers

我想制作一个通用方法,它可以得到List个数字的总和。

我正在尝试的是:

public static <T extends Number> T sumList(List<T> data)
{
    T total = 0;
    for (T elem : data)
    {
        total += elem;
    }
    return total;
}

但问题是there is no += operator in Ttotal can't be assigned to zero

我该怎么做?

由于

4 个答案:

答案 0 :(得分:18)

有些方法你可以一起破解这个,但老实说,仿制药根本就不是去这里的方法。为每个具体的原始包装类型构建一个方法并分别实现它们。使它成为通用的将是一件令人头疼的问题;算术运算一般不会发生。

你也没有真正获得任何东西。它是如此简单和常量的代码,您不必担心代码重复,因为它不会改变。人们不会将自己的数字类型传递给您的代码;它适用的类型域已经很好地定义和有限。

答案 1 :(得分:4)

我最近已经完成了(基于lambdaj代码),请注意它需要所有元素都是相同的类型(你不能真正添加​​Byte和{{1}如果不是这样,可以抛出一个CCE,并且不会处理自定义BigDecimal

Number

This code executed on ideone with examples

答案 2 :(得分:0)

您可以使用库,例如​​Generic Java Math(其编号部分),它为Number子类提供通用操作。它提供了一种通常使用数字的方法,就像在您的示例中一样,但是通过传递Arithmetics对象,可以进行实际计算。请参阅主页上的示例 它必须使用盒装类型,因此如果您需要速度,在Java中没有通用实现可以做到这一点,您必须使用原始类型。

答案 3 :(得分:0)

看看下面的通用方法示例,用于任何Number类型的变量列表的求和... 我相信这就是你要求的......

马克·彼得斯的答案也是正确的,但这也是一个可行的解决方案。

public class GenericSum {
@SuppressWarnings("unchecked")
public static <E> E sumArray(E[] inputArray) {
    Double result = 0.0;
    // Sum array elements
    for (E element : inputArray) {
        result = ((Number) result).doubleValue()
                + ((Number) element).doubleValue();
    }
    return ((E) result);
}

public static void main(String args[]) {
    // Create arrays of Integer, Double
    Integer[] intArray = { 1, 2, 3, 4, 5 };
    Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };

    System.out.println("Sum of doubles : " + sumArray(intArray));
    System.out.println("Sum of doubles : " + sumArray(doubleArray));
}

}