无法解析Java 8中的构造函数

时间:2019-06-12 12:03:11

标签: java collections java-8 java-stream

我想创建一个克隆列表。我正在使用下面的代码段,但是即使MyClass具有默认构造函数,我的IDE仍显示为“无法解析构造函数”的编译错误。

List<MyClass> clonedList = 
    myClassList.stream().map(MyClass::new).collect(Collectors.toList());

我是流媒体新手,如果我的语法错误,请帮助我。

1 个答案:

答案 0 :(得分:5)

MyClass::new仅在您的类具有一个采用单个参数且其类型为Stream元素类型的构造函数的情况下才有效。没有参数的构造函数将无法正常工作。

myClassList.stream().map(MyClass::new)...

表现为

myClassList.stream().map(e -> new MyClass(e))...

由于myClassListMyClass实例的列表,因此这意味着需要以下签名的构造函数才能使方法引用起作用-MyClass (MyClass other)

您仍然可以将无参数构造函数与以下lambda表达式一起使用:

myClassList.stream().map(e -> new MyClass())...

当然,这没有什么意义,因为它忽略了Stream的原始元素。

由于您的目标是克隆List,因此您需要一个复制构造函数:

public MyClass (MyClass other) {
    // copy the properties of other to this instance
}