4

我正在阅读有关 Java 8 特性的信息,这导致我阅读了这篇文章,我想知道构造函数引用的实际用途,我的意思是为什么不直接使用new Obj

PS,我试过谷歌搜索,但我找不到有意义的东西,如果有人有代码示例、链接或 tut 会很棒

4

2 回答 2

7

首先,你应该明白构造函数引用只是方法引用的一种特殊形式。关于方法引用的要点是它们不调用被引用的方法,而是提供一种方法来定义一个函数,该函数将在被评估时调用该方法。

链接文章的示例可能看起来没那么有用,但这是简短的自包含示例代码的普遍问题。这与“hello world”程序相同。这并不比直接在控制台中输入文本“hello world”更有用,但无论如何也不是这样。它的目的是演示编程语言。

正如assylias 所示interface,有些用例涉及使用 JFC API 的现有功能。


关于将与构造函数引用一起使用的自定义功能接口的有用性,您必须考虑使用(功能)interface一般的原因:抽象

由于 an 的目的interface是抽象底层操作,因此用例是您不想执行无条件new SomeType(…)操作的地方。

因此,一个示例是众所周知的工厂模式,您可以在其中定义interface构造对象并通过构造函数引用实现工厂只是无限可能性中的一种选择。

另一个重要的一点是各种通用方法,其中需要构造类型实例的可能性,由于类型擦除而未知。它们可以通过作为参数传递的函数来实现,并且是否需要现有函数interface之一或自定义函数仅取决于所需的参数数量和类型。

于 2015-04-01T10:01:48.343 回答
4

当您需要提供构造函数作为供应商或函数时,它很有用。例子:

List<String> filtered = stringList.stream()
        .filter(s -> !s.isEmpty())
        .collect(Collectors.toCollection(ArrayList::new)); //() -> new ArrayList<> ()

Map<String, BigDecimal> numbersMap = new HashMap<>();
numbersMap.computeIfAbsent("2", BigDecimal::new); // s -> new BigDecimal(s)

someStream.toArray(Object[]::new); // i -> new Object[i]

等等

于 2015-04-01T09:12:17.300 回答