参考构造函数的目的:Java 8

时间:2015-04-01 09:56:21

标签: java method-reference

我正在阅读Method References in Java8

的文档

其中我遇到了一个关于各种方法参考的表,其中4个是最后一个

-----------------------------------------------
Reference to a constructor :    ClassName::new 
-----------------------------------------------
  

您可以使用与静态方法相同的方式引用构造函数   使用新名称。

我无法理解对构造函数的引用究竟是什么?

注意:我知道Java文档是自我解释的,但在这种情况下,我无法理解它想要传达的内容。

2 个答案:

答案 0 :(得分:0)

它允许一些通用代码实例化您传递构造函数的类型的对象。

因此,如果您将SomeClass::new传递给函数f,例如

f(SomeClass::new)

函数f然后可以创建SomeClass类型的实例。

答案 1 :(得分:0)

只要您调用需要供应商的方法(即,其类型为Supplier<T>的参数),就可以使用构造函数引用。 T类的构造函数可以作为Supplier<T>

因此,例如,请考虑从Collectors类的Javadoc中获取此示例:

Set<String> set = 
    people.stream()
          .map(Person::getName)
          .collect(Collectors.toCollection(TreeSet::new));

Collectors.toCollection需要Supplier。当您传递TreeSet - TreeSet::new的构造函数时,它将使用is来创建一个包含Stream元素的TreeSet实例。如果您传递HashSet::new,则会创建HashSet个实例,而不是TreeSet