Intellij idea “Java8报告”;无法解析构造函数“;通过拨打“电话”:新";
在Intellij15.0.3中。使用Java8时,我在使用Intellij idea “Java8报告”;无法解析构造函数“;通过拨打“电话”:新";,intellij-idea,java-8,Intellij Idea,Java 8,在Intellij15.0.3中。使用Java8时,我在使用::new时遇到了一个问题。 特别是,我有一个带有默认构造函数的类 public class Container{ public Container(){} } 我想从列表中创建一个映射,如下所示: public class Test{ private final Map<Key, Container> map; @Before public void setUp(){ List<Ke
::new
时遇到了一个问题。
特别是,我有一个带有默认构造函数的类
public class Container{
public Container(){}
}
我想从列表中创建一个映射,如下所示:
public class Test{
private final Map<Key, Container> map;
@Before
public void setUp(){
List<Key> keys=...//Init the list
map = keys.stream().collect(Collectors.toMap(Function.identity(), Container::new));
}
}
公共类测试{
私人最终地图;
@以前
公共作废设置(){
列表键=…//初始化列表
map=keys.stream().collect(Collectors.toMap(Function.identity(),Container::new));
}
}
在Intellij中,new
为红色,工具提示显示无法解析构造函数容器
如果我做了()->{new Container()}
我还有无法推断函数接口类型Container
知道为什么吗?应该是这样的:
Collectors.toMap(Container::getMyUniqueField, Function.identity())
这将在创建的hashmap中使用getter作为键,并将对象本身作为值。每个映射函数都应该接受一个
键
参数Function.identity()
接受,但Container::new
不接受任何参数。与()->new Container()相同。你需要一个参数lambda。一个你会忽略的论点,因为它发生了
map = keys.stream().collect(Collectors.toMap(Function.identity(), key -> new Container()));
toMap
有两个参数。第一个是键映射器(因此我有Function.identity()
),第二个是valueMapper,它必须返回容器
类的新实例。您正在反转键和值。确切地说,您想要的是没有意义的