gpt4 book ai didi

java - 是否有原始值的对象包装器允许从 lambda 中改变它们?

转载 作者:行者123 更新时间:2023-12-05 05:33:20 26 4
gpt4 key购买 nike

考虑:

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 } 但那太可怕了。

最佳答案

Java 库中没有。但是 Apache Commons Lang 有 Mutable为了这。它为每个原始包装器提供子类,但每个包装器都是可变的(如 MutableInt、MutableBoolean 等)

您可以考虑使用它是否适合您。


更新

AtomicBoolean 是另一种选择。它允许您在线程之间共享它并更新它持有的 boolean 值。


我的 0.02 美元 - 每当我必须从 lambda 更新变量时,我都会退后一步,重新考虑我是否真的应该这样做,以及在这种情况下使用 lambda 是否是正确的选择。到目前为止 (AFAIR),我从来没有诉诸任何方法来克服 lambda 中使用的变量必须有效最终的限制。

关于java - 是否有原始值的对象包装器允许从 lambda 中改变它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73895366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com