Мне нужно создать вспомогательный метод, который позволяет создать сумму любого Итерабельного <? расширяет номер >, потому что мы имеем много векторов и требуют быстрого метода, чтобы определить сумму, поэтому я создал следующий метод:Java 1.7: Сумма Iterable <T extends Number>
static Integer sum(Iterable<Integer> it) {
Integer result = 0;
for(T next : it) {
result += next;
}
return result;
}
Этот метод работает только для целых чисел, однако, но у нас есть двойники и тоскует. Потому что у вас не может быть двух методов с одной и той же сигнатурой (наш компилятор считает, что целочисленная сумма (Iterable <Integer>) имеет ту же подпись, что и Double sum (Iterable <Double>).) Я попытался написать один метод с generics.
private static <T extends Number> T sum(Iterable<? extends T> it) {
T result;
for(T next : it) {
result += next;
}
return result;
}
Однако этот метод не будет скомпилирован (причина: оператор + = не определен для объекта, объекта). Что я могу сделать здесь? Я знаю, что на C++ вы можете перегружать операторы, но не на Java. Но каждый класс, который расширяет Number, перегружает оператор + =. Что я могу сделать здесь?
Заранее спасибо.
Вы можете использовать InstanceOf Double, Integer и т.д., и бросил его в таком случае присвоить числовой тип – rkosegi
InstanceOf не работает, потому что _result_ является недействительным после его объявления ... –
, если это будет один из самые важные вычисления в программе, я предлагаю в первую очередь избавиться от AnyGenericClass, а также AnyGenericClass , потому что он ОЧЕНЬ неэффективен и вместо этого использует массивы примитивных типов. –