Java8通过调用“:: new”报告“无法解析构造函数”

时间:2016-04-26 13:39:12

标签: intellij-idea java-8

在Intellij 15.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));


  }

}

在Intellij中,new为红色,工具提示显示为cannot resolve constructor Container

如果我() -> {new Container()}我也有cannot infer functional interface type Container

知道为什么吗?

2 个答案:

答案 0 :(得分:3)

每个映射函数都应该接受Key参数。 Function.identity()可以,但Container::new不带参数。与() -> new Container()相同。你需要一个单参数lambda。你会忽略的一个论点,正如它发生的那样。

map = keys.stream().collect(Collectors.toMap(Function.identity(), key -> new Container()));

答案 1 :(得分:-3)

应该是这样的:

Collectors.toMap(Container::getMyUniqueField, Function.identity())

这将在创建的hashmap中使用getter作为键,并将对象本身作为值。