先在 AtomicBoolean 中获取更新后的值

Get the updated value first in AtomicBoolean

getAndSet returns "previous" 值然后设置更新值,我想要 "reverse" 行为,到 return 更新值然后在 AtomicBoolean 对象中设置它。 就像你做

if(bolVal = otherBolVal)

这里的赋值先于求值。 可以单独使用 AtomicBoolean 还是我需要一个对我不利的自定义 class。

我有这个

sharedPref.edit().putBoolean("tag", isOvertime = false).apply();

这是一行完成的,现在我被迫将布尔值作为可变对象传递,所以我不想创建自定义 class 并选择了 AtomicBoolean。 现在我正在寻找一种方法,无需创建新的 class 或额外的行表达式即可以最少的努力完成相同的单行赋值。

是这样的吗?

private final AtomicBoolean atomicBoolean = new AtomicBoolean();

public boolean setAndGet(boolean bool) {
    atomicBoolean.getAndSet(bool);
    return bool;
}

不,您将需要一个扩展 AtomicBoolean 或 Utils class 的自定义 class。没有理由在 AtomicBoolean 中为此提供方法。即使在您的情况下,也只是多了一行代码...

我认为它是我一直在寻找的一种单线解决方案,但我完全不知道我是否走对了路。

在我需要同时赋值和 return true 的情况下,我使用:

sharedPref.edit().putBoolean("tag", at.getAndSet(true) || true).apply();

在我需要同时赋值和 return false 的情况下,我使用:

sharedPref.edit().putBoolean("tag", at.getAndSet(false) && false).apply();

我没有不知道新值或更新值的情况,但在那种情况下:

sharedPref.edit().putBoolean("tag", newVal ? (at.getAndSet(newVal) || newVal) : (at.getAndSet(newVal) && newVal)).apply();

我知道这是一场灾难,尤其是最后一场,但这是我能想到的最好的事情。