Java 在构造函数具有非空参数列表的情况下使用构造函数引用
给定Java 在构造函数具有非空参数列表的情况下使用构造函数引用,java,intellij-idea,java-8,java-stream,method-reference,Java,Intellij Idea,Java 8,Java Stream,Method Reference,给定 列表副本(列表foos){ 返回foos .stream() .map(foo->newfoo(foo)) .collect(Collectors.toList()); } IntelliJ IDEA 2016.1.1报告称,新的Foo(Foo)“可替换为方法参考” 我知道no-arg构造函数的Foo::new语法,但不知道如何将Foo作为参数传入。我肯定错过了一些东西 我知道no-arg构造函数的Foo::new语法 这不是Foo::new所做的 在这种情况下 List<Foo&
列表副本(列表foos){
返回foos
.stream()
.map(foo->newfoo(foo))
.collect(Collectors.toList());
}
IntelliJ IDEA 2016.1.1报告称,新的Foo(Foo)
“可替换为方法参考”
我知道no-arg构造函数的Foo::new
语法,但不知道如何将Foo
作为参数传入。我肯定错过了一些东西
我知道no-arg构造函数的Foo::new
语法
这不是Foo::new
所做的
在这种情况下
List<Foo> copy(List<Foo> foos) {
return foos
.stream()
.map(foo -> new Foo(foo))
.collect(Collectors.toList());
}
列表副本(列表foos){
返回foos.stream().map(Foo::new.collect(Collectors.toList());
}
将寻找需要
Foo
参数的构造函数。a-ha,非常有用!感谢您设置了直柱。@Pillar解释得很好。更具体地说,它将使用方法ref的目标类型作为重载选择的输入,以找到正确的构造函数。始终从函数接口开始map()
接受一个函数,该函数接受一个参数并返回一个值。当为函数
分配构造函数引用时,返回值显然是正在构造的类型,但由于函数
采用一个参数,因此构造函数也必须采用一个参数。如果函数类型是一个双函数
,它将查找一个具有2个参数的构造函数。如果函数类型是不带参数的供应商
,它将调用无参数构造函数。
List<Foo> copy(List<Foo> foos) {
return foos.stream().map(Foo::new).collect(Collectors.toList());
}