当您编写匿名可运行时,例如:
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()
突然不再需要了
如果您的匿名类只有一个方法,则可以将其实现为lambda表达式。这里作为lambda传递的是run
方法的实现。Lambda表达式使您能够更紧凑地表达单个方法类的实例。