1

我正在阅读 Java8 中的方法引用文档

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

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

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

我无法理解对构造函数的引用到底是做什么的?

注意:我知道 Java 文档是不言自明的,但在这种情况下,我无法理解它究竟想要传达什么。

4

2 回答 2

0

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

因此,如果您将 a 传递给类似SomeClass::new的函数f

f(SomeClass::new)

然后该函数f能够创建该SomeClass类型的实例。

于 2015-04-01T10:00:11.240 回答
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 创建一个TreeSet包含 Stream 元素的实例。如果您将 a 传递给它HashSet::new,它将创建一个HashSet实例而不是TreeSet.

于 2015-04-01T10:00:19.223 回答