0

getAndSet返回“上一个”值然后设置更新值,我想要“反向”行为,返回更新值然后在AtomicBoolean对象中设置它。就像你做的那样

if(bolVal = otherBolVal)

这里的分配先于评估。它可以AtomicBoolean单独完成还是我需要一个对我不利的自定义类。

我有这个

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

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

4

2 回答 2

2

像这样的东西?

private final AtomicBoolean atomicBoolean = new AtomicBoolean();

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

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

于 2020-03-06T11:41:41.457 回答
0

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

在我需要分配和返回 true 的情况下,我使用:

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

在我需要分配和返回 false 的情况下,我使用:

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

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

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

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

于 2020-03-06T13:23:04.423 回答