Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在构造函数具有非空参数列表的情况下使用构造函数引用_Java_Intellij Idea_Java 8_Java Stream_Method Reference - Fatal编程技术网

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());
}