java8中构造函数引用有什么用
What are the uses of constructor reference in java 8
我正在阅读有关 Java 8 个功能的信息,这使我想到了这个 article 我想知道构造函数引用的实际用途,我的意思是为什么不直接使用 new Obj
?
P.S,我试过谷歌搜索,但我没能找到有意义的东西,如果有人有代码示例,link或啧啧会很棒
当您需要提供构造函数作为供应商或函数时,它很有用。示例:
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]
等等
首先,您应该了解构造函数引用只是方法引用的一种特殊形式。关于方法引用的要点是它们不调用引用的方法,而是提供一种方法来定义一个函数,该函数将在被评估时调用该方法。
链接文章的示例可能看起来没那么有用,但这是简短的独立示例代码的普遍问题。它与“hello world”程序一样。它并不比直接在控制台中输入文本“hello world”更有用,但无论如何也无济于事。它的目的是演示编程语言。
与 一样,存在涉及使用 JFC API.
的现有功能 interface
的用例
关于将与构造函数引用一起使用的自定义功能接口的有用性,您必须考虑一般使用(功能)interface
的原因:抽象.
由于interface
的目的是抽象底层操作,用例是您不想执行无条件[=13]的地方=] 操作.
所以一个例子是众所周知的 Factory 模式,您定义一个 interface
来构造一个对象,并通过构造函数引用实现工厂只是 一个个选项,无限可能。
另一个重点是所有类型的泛型方法,在这些方法中需要构造由于类型擦除而未知的类型实例的可能性。它们可以通过作为参数传递的函数来实现,是否需要现有函数 interface
s 之一或自定义函数仅取决于所需参数的数量和类型。
我正在阅读有关 Java 8 个功能的信息,这使我想到了这个 article 我想知道构造函数引用的实际用途,我的意思是为什么不直接使用 new Obj
?
P.S,我试过谷歌搜索,但我没能找到有意义的东西,如果有人有代码示例,link或啧啧会很棒
当您需要提供构造函数作为供应商或函数时,它很有用。示例:
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]
等等
首先,您应该了解构造函数引用只是方法引用的一种特殊形式。关于方法引用的要点是它们不调用引用的方法,而是提供一种方法来定义一个函数,该函数将在被评估时调用该方法。
链接文章的示例可能看起来没那么有用,但这是简短的独立示例代码的普遍问题。它与“hello world”程序一样。它并不比直接在控制台中输入文本“hello world”更有用,但无论如何也无济于事。它的目的是演示编程语言。
与
interface
的用例
关于将与构造函数引用一起使用的自定义功能接口的有用性,您必须考虑一般使用(功能)interface
的原因:抽象.
由于interface
的目的是抽象底层操作,用例是您不想执行无条件[=13]的地方=] 操作.
所以一个例子是众所周知的 Factory 模式,您定义一个 interface
来构造一个对象,并通过构造函数引用实现工厂只是 一个个选项,无限可能。
另一个重点是所有类型的泛型方法,在这些方法中需要构造由于类型擦除而未知的类型实例的可能性。它们可以通过作为参数传递的函数来实现,是否需要现有函数 interface
s 之一或自定义函数仅取决于所需参数的数量和类型。