Сначала получите обновленное значение в AtomicBoolean - PullRequest
2 голосов
/ 06 марта 2020

getAndSet возвращает «предыдущее» значение, затем устанавливает обновленное значение, я хочу, чтобы «обратное» поведение возвращало обновленное значение и затем устанавливало его в объекте AtomicBoolean. точно так же, как когда вы делаете

if(bolVal = otherBolVal)

, задание здесь предшествует оценке. это можно сделать с помощью AtomicBoolean или мне нужен специальный класс, который мне не подходит.

У меня было это

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

, которое было сделано в одну строку, теперь я был вынужден передать логическое значение как изменяемый объект, поэтому я не хотел создавать пользовательский класс и выбрал AtomicBoolean. теперь я ищу способ сделать то же самое однострочное назначение с наименьшими усилиями, не создавая новый класс или дополнительное выражение строки.

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Я понял, что это решение с одним вкладышем, которое я искал, но я не знаю, правильно ли я иду в правильном направлении.

в ситуациях, когда мне нужно и назначить, и вернуть 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();

Я знаю, что это катастрофа, особенно последняя, ​​но это лучшее, что я мог придумать.

2 голосов
/ 06 марта 2020

Что-то вроде этого?

private final AtomicBoolean atomicBoolean = new AtomicBoolean();

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

Нет, вам понадобится пользовательский класс, расширяющий AtomicBoolean или класс Utils. Нет причин иметь метод для этого в AtomicBoolean. Даже в вашем случае это просто еще одна строка кода ...

...