java - 您能帮我理解这个供应商和这个 Java 构造中的分配吗?

标签 java java-8 supplier

有这个other question这只解释了传递函数引用,但这并没有回答下面关于这个 Java 赋值如何工作、转换到这个 Supplier 的问题对象以及何时发生。

我有以下代码片段,并且有点难以理解它,并且可能我不是唯一的人。有人可以给出这段代码的“傻瓜式”解释(供应商模式和使用双冒号( :: )运算符的赋值。Java 何时真正进行函数调用?我的期望是 objectFactorySupplier 成为一个函数指针。

private Supplier<ObjectFactory> getObjectFactorySupplier(String name) {
    // how does this assignment work?
    Supplier<ObjectFactory> objectFactorySupplier = this::getObjectFactory;
    ...
    return objectFactorySupplier;
}

private ObjectFactory getObjectFactory() {
    ObjectFactory factory = new ObjectFactorySupplier().get();
    ...
    return factory;
}

最佳答案

  • Supplierfunctional interface作为 Java 8 的一部分引入。因此,可以在 lambda 表达式中替换函数式接口(interface),例如:Runnable、Callable 等。因此,根据定义,它代表结果的提供者。
  • ::是一个方法引用

在您的代码中,

Supplier<ObjectFactory> objectFactorySupplier = this::getObjectFactory;

this::getObjectFactory 返回对您的私有(private)方法的方法引用。并且该方法引用被分配到表达式的左侧。根据其代码定义,它基本上提供了一个 objectFactory。它可以被赋值,因为它符合Supplier功能接口(interface)的定义

现在,这个方法引用用于最终获取objectFactory。

关于java - 您能帮我理解这个供应商和这个 Java 构造中的分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61538880/

相关文章:

java - Weblogic 卡住线程 - ArrayList

java - criteria.list() 和 sql-query 返回不同的结果集

java - 编程新手,Java.lang.NullPointerException 与 ArrayList

Java:获取通用供应商返回对象的类类型

java - 如何从InputStream读取字符并将其返回到Supplier<Integer> (Java)

java - 为什么 Optional 的 or 和 flatMap 方法的供应商类型参数是通配符?

java - 使用 intellij 和 payara 调试两个独立的 java 服务器应用程序

java - 如何在 Java 8 中逐行读取文件?

java - 对另一个流进行流过滤并计数

java - Arrays.parallelSort 与 Collections.sort