java 8中构造函数引用的用途是什么

时间:2015-04-01 08:46:24

标签: functional-programming java-8 method-reference

我正在阅读有关Java 8功能的内容,这些功能引导我进入article,我想知道构造函数引用的实际用途,我的意思是为什么不使用new Obj

P.S,我试过谷歌搜索,但我没有找到有意义的东西,如果有人有代码示例,链接或啧啧它会很棒

2 个答案:

答案 0 :(得分:7)

首先,您应该了解构造函数引用只是方法引用的一种特殊形式。关于方法引用的观点是它们不调用引用的方法,而是提供一种定义函数的方法,该函数在被计算时将调用该方法。

链接文章的示例可能看起来不那么有用,但这是简短的自包含示例代码的一般问题。这和“hello world”计划一样。它并不比直接在控制台中键入文本“hello world”更有用,但它无论如何都不是必须的。它的目的是演示编程语言。

作为assylias has shown,有些用例涉及使用JFC API的现有功能interface


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

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

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

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

答案 1 :(得分: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]