是否可以在Java 8中编写JavaScript箭头函数?

ken*_*nny 2 java lambda java-8

这是JavaScript版本:

var counter = 1;
var incrementor = () => counter++;
incrementor();
console.log(counter);  // 2
Run Code Online (Sandbox Code Playgroud)

是否可以将其写为Java 8 lambda函数来进行这种简单的计数?

Nay*_*uki 6

你可以做到这一点 - 有两点需要注意:

  • 你不能只func()用Java 打电话; 你需要打电话obj.func().
  • 匿名类或lambda不能更改封闭范围中的局部变量的值.

以下是您编写的JavaScript代码最接近的可编译Java代码:

int[] counter = {1};  // Use an array and mutate the element inside
Runnable incrementor = () -> counter[0]++;
incrementor.run();
System.out.println(counter[0]);
Run Code Online (Sandbox Code Playgroud)

作为单元素数组的替代方法,您可以改为使用AtomicInteger.