时间:2021-07-01 10:21:17 帮助过:63人阅读
String[] a = new String[1];
... ( () -> a[0] = "a" );
return a[0];
/* 你可以用AtomicReference将你所需要的值包装起来 */
private static int sum(int low, int high) {
AtomicReference<Integer> sum = new AtomicReference<>(0);
IntStream.rangeClosed(low, high).forEach(i -> sum.set(sum.get() + i));
return sum.get();
}
/* 对于基本类型有专用的包装类更方便使用(且是原子化操作) */
private static int sum2(int low, int high) {
AtomicInteger sum = new AtomicInteger(0);
IntStream.rangeClosed(low, high).forEach(sum::addAndGet);
return sum.get();
}
/* 其实很多时候,我们并不需要改变外部状态不是吗? */
private static int sum3(int low, int high) {
return IntStream.rangeClosed(low, high).sum();
}
C++:可以
C#:可以
F#:可以
VB:可以
补充 @vczhvoid SomeObject someMethod(Supplier<Optional<Object>> foo) {
return foo.get().map(a -> ((Object a) -> ...)).orElseGet(() -> ...);
}
java的函数无法进行引用传递,闭包的捕获也一样。so sad。
什么叫"不能向外传递值"?