对于下面的代码,
public class X{
...
static class Y implements Runnable{
.....
List<Thread> makeWorkerThreads(Function<String, Void> task) {
List<Thread> workerThreads = new ArrayList<>();
mInputList.forEach(input -> workerThreads.add
(new Thread(
() -> task.apply(input)
)));
return workerThreads;
}
....
} // Y
....
} // X
在哪里
task
是private Void processInput(String input) {
...
}
无法理解以下语法,
mInputList.forEach(input -> workerThreads.add
(new Thread(
() -> task.apply(input)
)
)
);
如何
task.apply(input)
解析名称 input
在被覆盖 run()
方法?无法可视化 run() 方法
最佳答案
mInputList.forEach()
接受 Consumer<? super String> action
参数,其中 String
是您的 mInputList
的元素类型List
.
因此,您可以将外部 lambda 表达式视为实现 Consumer
的匿名类实例。接口(interface),因此具有 void accept(String t);
方法。
现在,forEach
适用 accept
mInputList
的每个元素的方法.accept
的执行代码中的方法如下所示:
void accept (String input) {
workerThreads.add (new Thread(() -> task.apply(input)));
}
现在你可以看到
input
来自。内部 lambda 表达式
() -> task.apply(input)
实现 Runnable
界面。即它实现了一个不带参数的方法(因此是 ()
部分)并且什么都不返回(在这种情况下 task.apply(input)
确实返回一个值,但它被忽略了)。
关于multithreading - 如何可视化嵌套的 lambda 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47258918/