Intellij idea “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

在Intellij15.0.3中。使用Java8时,我在使用
::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,它必须返回
容器
类的新实例。您正在反转键和值。确切地说,您想要的是没有意义的