我理解闭包,并且已经应用了一些语言,例如 Python 和 SML。然而,当我阅读关于 Java 闭包的维基百科(当然,只有 8 个版本)时,我不明白 Java 在他们的示例中是否支持闭包的区别。
我从维基百科复制的那些代码:关闭
没有闭包的java代码:
class CalculationWindow extends JFrame {
private volatile int result;
...
public void calculateInSeparateThread(final URI uri) {
// The expression "new Runnable() { ... }" is an anonymous class implementing the 'Runnable' interface.
new Thread(
new Runnable() {
void run() {
// It can read final local variables:
calculate(uri);
// It can access private fields of the enclosing class:
result = result + 10;
}
}
).start();
}
}
如果 Java 支持闭包,代码将如下所示:
class CalculationWindow extends JFrame {
private volatile int result;
...
public void calculateInSeparateThread(final URI uri) {
// the code () -> { /* code */ } is a closure
new Thread(() -> {
calculate(uri);
result = result + 10;
}).start();
}
}
所以,我的问题是:如果 Java 支持闭包,那么第二个代码中有哪些特别之处?我真的看不出两个代码之间的主要区别。
请告诉我这一点。
谢谢 :)