替换匿名 new Runnable() 的 lambda 是如何工作的?
How does a lambda replacing an Anonymous new Runnable() work?
当你写一个匿名的Runnable比如:
Thread producer = new Thread(new Runnable() {
@Override
public void run() {
// do something
}
});
IntelliJ 建议将其替换为以下 lambda:
Thread producer = new Thread(() -> {
// do something
}
});
效果一样好。
这究竟是如何工作的?特别是:
- 使用的构造函数仍然是
Thread(Runnable target)
,但 lambda 中没有任何内容表明它是一个 Runnable。
- 为什么
@Override public void run()
突然不再需要了?
如果您的匿名 class 只有一种方法,您可以将其实现为 lambda 表达式。您在此处作为 lambda 传递的是 run
方法的实现。 Lambda 表达式让您可以更紧凑地表达单一方法 classes 的实例。
当你写一个匿名的Runnable比如:
Thread producer = new Thread(new Runnable() {
@Override
public void run() {
// do something
}
});
IntelliJ 建议将其替换为以下 lambda:
Thread producer = new Thread(() -> {
// do something
}
});
效果一样好。
这究竟是如何工作的?特别是:
- 使用的构造函数仍然是
Thread(Runnable target)
,但 lambda 中没有任何内容表明它是一个 Runnable。 - 为什么
@Override public void run()
突然不再需要了?
如果您的匿名 class 只有一种方法,您可以将其实现为 lambda 表达式。您在此处作为 lambda 传递的是 run
方法的实现。 Lambda 表达式让您可以更紧凑地表达单一方法 classes 的实例。