[英]Is there an object wrapper for primitive values that allows mutating them from a lambda?
考慮:
boolean somethingHappened = false;
Runnable doHappen = () -> { somethingHappened = true; }
你不能那樣做,因為somethingHappened
不是最終的。 理由是,通常,您不需要更改從 lambda 到 scope 捕獲的變量。但是例如,當使用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 中使用的變量必須有效最終的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.