Java Stream.empty()
- это обобщенный метод со следующим объявлением.
public static<T> Stream<T> empty() {
// Remainder omitted.
}
Таким образом, вы должны явно передать параметры типа.В противном случае он создаст Stream
типа java.lang.Object
.Поэтому измените объявление так, чтобы избавиться от ошибки.
Stream.<CharSequence>empty().collect(Collectors.summingInt(CharSequence::length));
Java не будет выводить тип на основе типов данных, используемых в последующих операциях в вашем конвейере обработки stream
.Алгоритм разрешения типов не такой умный, как вы думаете.Однако он будет выводить, если вы передадите значения фабричному методу.Для примера это будет работать.
Stream.of("ab", "abc").collect(Collectors.summingInt(CharSequence::length));