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

Roh*_*hit 1 java collections java-8 java-stream

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

List<MyClass> clonedList = 
    myClassList.stream().map(MyClass::new).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

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

Era*_*ran 5

MyClass::new仅当您的类具有一个采用单个参数(其类型为的元素类型)的构造函数时,该函数才能在这种情况下工作Stream。无参数的构造函数将无法工作。

myClassList.stream().map(MyClass::new)...
Run Code Online (Sandbox Code Playgroud)

表现为

myClassList.stream().map(e -> new MyClass(e))...
Run Code Online (Sandbox Code Playgroud)

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

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

myClassList.stream().map(e -> new MyClass())...
Run Code Online (Sandbox Code Playgroud)

当然,这毫无意义,因为它忽略了的原始元素Stream

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

public MyClass (MyClass other) {
    // copy the properties of other to this instance
}
Run Code Online (Sandbox Code Playgroud)

  • @Rohit有复制构造函数或克隆方法。Stream API中没有魔术可以克隆不可克隆的对象。 (2认同)