首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析Java 8中的构造函数

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

Stack Overflow用户
提问于 2019-06-12 20:03:12
回答 1查看 1.7K关注 0票数 2

我想创建一个克隆列表。我正在使用下面的代码片段,但是我的集成开发环境显示了一个编译错误“无法解析构造函数”,尽管MyClass有一个默认的构造函数。

代码语言:javascript
复制
List<MyClass> clonedList = 
    myClassList.stream().map(MyClass::new).collect(Collectors.toList());

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 20:05:39

只有当您的类有一个构造函数,该构造函数接受类型为Stream元素类型的单个参数时,MyClass::new才能在此上下文中工作。无参数的构造器将不起作用。

代码语言:javascript
复制
myClassList.stream().map(MyClass::new)...

行为方式为

代码语言:javascript
复制
myClassList.stream().map(e -> new MyClass(e))...

由于myClassList是一个工作实例列表,这意味着为了让方法引用MyClass - MyClass (MyClass other),将需要具有以下签名的构造函数。

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

代码语言:javascript
复制
myClassList.stream().map(e -> new MyClass())...

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

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

代码语言:javascript
复制
public MyClass (MyClass other) {
    // copy the properties of other to this instance
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56561796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档