java 8收集器<;字符串,A,R>;不是一个功能界面,谁能说出原因?
代码如下:java 8收集器<;字符串,A,R>;不是一个功能界面,谁能说出原因?,java,lambda,java-8,java-stream,collectors,Java,Lambda,Java 8,Java Stream,Collectors,代码如下: public class Test { public static void main(String[] args) { Stream.of(1, 2, 3).map(String::valueOf).collect(Collectors::toList); } } 告诉我: 收集器不是功能接口 但当我修改代码如下,一切都是好的,我不知道为什么 public class Test { public static void main(Strin
public class Test {
public static void main(String[] args) {
Stream.of(1, 2, 3).map(String::valueOf).collect(Collectors::toList);
}
}
告诉我:
收集器
不是功能接口
但当我修改代码如下,一切都是好的,我不知道为什么
public class Test {
public static void main(String[] args) {
Stream.of(1, 2, 3).map(String::valueOf).collect(Collectors.<String>toList());
}
}
公共类测试{
公共静态void main(字符串[]args){
Stream.of(1,2,3).map(String::valueOf).collect(Collectors.toList());
}
}
收集器接口有多种方法(合并器()
,完成器()
,供应商()
,收集器()
)需要实现,因此它不能是功能接口,只能有一种方法,没有默认实现
我看不出你的问题与附加的代码有什么关系。第一个语法非法的原因是方法签名所隐含的目标类型-
Stream.collect(Collector)
-是一个收集器Collector
有多个抽象方法,因此它不是一个功能接口,不能有@FunctionInterface
注释
像Class::function
或object::Method
这样的方法引用只能分配给函数接口类型。由于Collector
不是功能接口,因此不能使用任何方法引用向collect(Collector)
提供参数
相反,作为函数调用Collectors.toList()
。显式的
类型参数是不必要的,如果最后没有括号,您的“工作”示例将无法工作。这将创建一个Collector
实例,该实例可以传递给collect()
我想他们打算使用Collector.toList()
。