Java 1.7:可迭代的< T扩展Number>的总和. [英] Java 1.7: Sum of Iterable<T extends Number>

查看:84
本文介绍了Java 1.7:可迭代的< T扩展Number>的总和.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建一个辅助方法,该方法可以创建任何Iterable的总和.扩展Number> ;,因为我们有很多矢量,并且需要一种快速的方法来确定总和,所以我创建了以下方法:

I need to create a helper method which allows to create a sum of any Iterable<? extends Number>, because we have many vectors and require a fast method to determine the sum, so I created the following method:

 static Integer sum(Iterable<Integer> it) {
    Integer result = 0;
    for(T next : it) {
        result += next;
    }
    return result;
 }

该方法仅适用于int,但我们也有双精度和长整型.因为您不能有两个具有相同签名的方法(我们的编译器认为Integer sum(Iterable< Integer>)与Double sum(Iterable< Double>)具有相同的签名.)我试图用泛型编写一个方法.

This method only works for ints however, but we also have doubles and longs. Because you can't have two methods with the same signature (Our compiler thinks Integer sum(Iterable<Integer>) has the same signature as Double sum(Iterable<Double>).) I tried to write one method with generics.

private static <T extends Number> T sum(Iterable<? extends T> it) {
    T result;
    for(T next : it) {
        result += next;
    }
    return result;
}

但是,该方法将无法编译(原因:未为Object,Object定义运算符+ =).我在这里可以做什么?我知道在C ++中可以重载运算符,但在Java中则不能.但是每个扩展Number的类都会使+ =运算符重载.我在这里可以做什么?

However this method will not compile (reason: the operator += is undefined for Object, Object). What can I do here? I know in C++ you can overload operators, but not in Java. But every class which extends Number does overload the += operator. What can I do here?

谢谢.

推荐答案

如果数字不能为BigInteger s或BigDecimal s,则可以尝试将其转换为double s并进行如下求和:

If the numbers cannot be BigIntegers or BigDecimals, you can try converting them to doubles and sum them as such:

double result = 0;
for (T number : it) {
    result += number.doubleValue();
}

这篇关于Java 1.7:可迭代的&lt; T扩展Number&gt;的总和.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆