gpt4 book ai didi

java-8 - 是否可以将 Function 传递给 ExecutorService 而不是在 Java 8 中调用?

转载 作者:行者123 更新时间:2023-12-04 02:01:46 25 4
gpt4 key购买 nike

public class myService {

@Autowired
ExecutorService executor;

public Result getServiceResult(Token token, Profile profile){
//validate token and profile
return getResult(token, profile).get();
}

private getResult (Token token, Profile profile){
Future<Result> = threadPoolExecutor.submit(
() -> myManager.createAccount(token, profile));
}
}

这段代码在我目前的工作中运行良好。我无法理解 threadPoolExecutor.submit 是如何传递“函数/方法”而不是 callable 的?

我正在使用 Java 8 和 Spring 框架。

最佳答案

据我了解,您想知道为什么您似乎能够将“函数”传递给 ThreadPoolExecutor.submit()采用 Callable 的方法, 不是 Function .

解释是方法不能Function作为参数;您看到的是传入的 Callable,表示为 lambda expression (本质上是一个使用右箭头 (->) 语法的表达式)。

如上一篇文档所述,lambda 表达式用于提供一个接口(interface)的实现,该接口(interface)只有一个抽象方法,该抽象方法不是 Object 上方法的重写。这些通常被注释为 FunctionalInterface ,这可能是您产生困惑的地方,尽管这不是 the Language Specification 中概述的要求。 :

A functional interface is an interface that has just one abstract method (aside from the methods of Object), and thus represents a single function contract. This "single" method may take the form of multiple abstract methods with override-equivalent signatures inherited from superinterfaces; in this case, the inherited methods logically represent a single method.

在上面的示例中,根据 myManager.createAccount() 的返回类型,您要么提供 Callable 的实现(如果您返回任何内容),或 Runnable如果它是一个 void 方法:

() -> myManager.createAccount(token, profile)

您的 lambda 匹配摘要的方法签名 call()run()方法,因为它不带参数(如箭头左侧的 () 所示),并返回 void 或一些结果。

关于java-8 - 是否可以将 Function 传递给 ExecutorService 而不是在 Java 8 中调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30467109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com