Вы не можете этого сделать. Нет универсального c способа установить Number
в 0. Как сказал Джони в комментарии, нет универсального c способа добавления двух экземпляров одного и того же подкласса Number
.
Один из вариантов - отложить эти две операции до подкласса, который знает конкретный тип, который представляет T
. Таким образом, ваш основной класс должен быть абстрактным.
abstract class IgniteReducer<T extends Number> {
protected T sum = zero();
protected abstract T zero();
public abstract boolean collect(T number);
public T reduce() {
return sum;
}
}
Одна конкретная реализация может быть:
class IgniteFloatReducer extend IgniteReducer<Float> {
Float zero() {
return 0;
}
public boolean collect(Float number) {
sum += number;
return true;
}
}
Я набрал код здесь без его тестирования, поэтому, пожалуйста, простите за любую опечатку.