java 8 Collector 不是一个function界面,谁可以告诉为什么?
以下代码:
public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors::toList) } }
intellij告诉我:
Collector
不是function接口
但是当我修改代码如下,一切都很好,我不知道为什么?
public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors.toList) } }
第一种语法是非法的原因是方法签名 – Stream.collect(Collector)
隐含的目标类型 – 是Collector
。 Collector
有多个抽象方法,因此它不是一个function接口,也不能有@FunctionalInterface
注释。
像Class::function
或object::method
这样的方法引用只能分配给function接口类型。 由于Collector
不是函数接口,因此不能使用方法引用来提供collect(Collector)
参数。
而是将Collectors.toList()
作为函数调用。 显式的
类型参数是不必要的,并且您的“工作”示例在最后没有括号时将不起作用。 这将创建一个可以传递给collect()
的Collector
实例。
Collector
接口有多个方法( combiner()
, finisher()
, supplier()
, accumulator()
)需要一个实现,因此它不能是一个function接口,它只能有一个没有默认实现的方法。
我看不出你的问题与附加的代码有什么关系。