私はクロージャを理解しており、Python や SML などの言語で適用したことがあります。それにもかかわらず、Java のクロージャについてウィキペディアを読んだとき (もちろん、8 バージョンのみ)、Java がクロージャをサポートしているかどうかの違いが、その例ではわかりません。
ウィキペディアからコピーしたコード : Closure
クロージャのない 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がクロージャーをサポートしている場合、2番目のコードのどの特別なことですか? 2つのコードの主な違いは本当にわかりません。
この点を教えてください。
ありがとう :)