Java 8 Java类型推断混乱

Java 8 Java类型推断混乱,java-8,java-stream,type-inference,collectors,functional-interface,Java 8,Java Stream,Type Inference,Collectors,Functional Interface,有人能给我解释一下吗,为什么编译器不能自动推断出这个表达式类型 Stream.empty().collect(Collectors.summingit(CharSequence::length)) 我们知道在此上下文中CharSequence::length是ToIntFunction,因此从流元素中使用的类型是CharSequence,因此,正在收集的流是stream类型 在我的IDE上,出现以下错误: collect(CollectorJava的Stream.empty()方法是一个具有以下

有人能给我解释一下吗,为什么编译器不能自动推断出这个表达式类型

Stream.empty().collect(Collectors.summingit(CharSequence::length))

我们知道在此上下文中
CharSequence::length
ToIntFunction
,因此从流元素中使用的类型是
CharSequence
,因此,正在收集的流是
stream
类型

在我的IDE上,出现以下错误:

collect(CollectorJava的
Stream.empty()
方法是一个具有以下声明的通用方法

public static<T> Stream<T> empty() {
   // Remainder omitted.
}
Java不会根据
处理管道中下游操作中使用的数据类型来推断类型。类型解析算法并不像您想象的那么聪明。但是,如果您将值传递给工厂方法,它会进行推断。对于一个实例,这会起作用

Stream.of("ab", "abc").collect(Collectors.summingInt(CharSequence::length));

顺便感谢您的回答,问题是我知道如何通过在
Stream.empty()的早期显式设置type参数来解决这个问题
方法。问题是为什么java没有从上下文自动推断出这一点,我的意思是,我确实是通过
收集器
收集流的,这必须向java提供输入元素类型的线索,即
CharSequence
否?这是一个已知的限制。目标类型不是通过链式方法调用传播的。H在这里,
Stream.empty()
collect(Collectors.summingit(CharSequence::length))
被链接起来。对此进行了解释和说明。
Stream.of("ab", "abc").collect(Collectors.summingInt(CharSequence::length));