请考虑:
boolean somethingHappened = false;
Runnable doHappen = () -> { somethingHappened = true; }
你不能这样做,因为somethingHappened
不是最终结果.其基本原理是,通常不需要更改lambda作用域中捕获的变量.但例如,当使用Stream.forEach
时,这并不是一个不寻常的需要.
当然,我可以编写一个包装器:
class Wrap<T>
{
public T value;
}
然后我会访问somethingHappened.value
并改变这一点.
我只是想知道标准Java库中是否已经存在这种包装器.我只知道Optional
个是不变的.我可以滥用数组final boolean[] mutableBool = { false }
,但这太可怕了.