使用构造函数引用,其中构造函数具有非空参数列表

Sea*_*lly 5 java intellij-idea java-8 java-stream method-reference

鉴于..

List<Foo> copy(List<Foo> foos) {
    return foos
            .stream()
            .map(foo -> new Foo(foo))
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

IntelliJ IDEA 2016.1.1报告new Foo(foo)"可以用方法参考替换".

我知道Foo::newno-arg构造函数的语法,但是没有看到我如何foo作为参数传入.我肯定在这里遗漏了一些东西.

Sav*_*ior 8

我知道Foo::newno-arg构造函数的语法

那不是那个Foo::new.此表达式将扩展到其使用的上下文中所需的内容.

在这种情况下

List<Foo> copy(List<Foo> foos) {
    return foos.stream().map(Foo::new).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

会寻找需要Foo参数的构造函数.

  • 更具体地说,它将使用方法ref的_target type_作为重载选择的输入来查找正确的构造函数. (4认同)