我正在阅读Method References in Java8
的文档其中我遇到了一个关于各种方法参考的表,其中4个是最后一个
-----------------------------------------------
Reference to a constructor : ClassName::new
-----------------------------------------------
您可以使用与静态方法相同的方式引用构造函数 使用新名称。
我无法理解对构造函数的引用究竟是什么?
注意:我知道Java文档是自我解释的,但在这种情况下,我无法理解它想要传达的内容。
答案 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
。