有这个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;
}
最佳答案
- Supplier是 functional 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/