我需要创建一个帮助方法,可以对任何Iterable<? extends Number>进行求和,因为我们有许多向量,并且需要一种快速的方法来确定它们的总和,所以我创建了以下方法:
static Integer sum(Iterable<Integer> it) {
Integer result = 0;
for(T next : it) {
result += next;
}
return result;
}
这种方法仅适用于整数,但我们还有浮点数和长整型。由于您不能拥有两个具有相同签名的方法(我们的编译器认为Integer sum(Iterable<Integer>)与Double sum(Iterable<Double>)具有相同的签名),因此我尝试编写一个泛型方法。
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的每个类都会重载+=运算符。我该怎么办呢?
提前感谢您。