Вы можете использовать метод intValue
в классе Integer
(фактически унаследованном от Number
), т.е.
sum += element.intValue();
Причина, по которой вы не можете просто использовать sum += element
, заключается в том, чтоКомпилятор не знает, что такое конкретный класс T
, поэтому он не может выполнить автоматическую коробку.T
может быть Integer
, но вы объявили T
как T extends Integer
, поэтому компилятор не знает, что на самом деле подкласс T
.
Теперьв вашем случае это становится немного интереснее, потому что Integer
- последний класс.Вы можете утверждать, что компилятор должен быть в состоянии выяснить, что T
всегда будет Integer
.Очевидно, он этого не делает.
Возможно, это тот случай, когда вы не хотите использовать дженерики: никогда не может быть подкласса Integer
, так почему бы не избавиться от обобщенияв целом?
class Sum implements Visitor<Integer> {
public void visit(Integer i) {
sum += i;
}
}
Это должно работать очень хорошо.