Java 1.7:可迭代的< T扩展Number>的总和. [英] Java 1.7: Sum of Iterable<T extends 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 BigInteger
s or BigDecimal
s, you can try converting them to double
s and sum them as such:
double result = 0;
for (T number : it) {
result += number.doubleValue();
}
这篇关于Java 1.7:可迭代的< T扩展Number>的总和.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!