Есть ли оператор пост-присваивания для логического значения?

Привет, возможно ли что-то подобное в Java?

boolean flag = true;
if(flag) return flag = false; // return true and assign false to flag afterwards

Чтобы уточнить. Выше работает, но сначала присваивает ложь. Хотите, я хочу добиться, чтобы вернуть флаг, как только егоtrue и сбросьте его доfalse после этого.

Структура выглядит примерно так:

boolean flag = false;
// some operations which can set the flag true
if(flag){ flag = false ; return true};
// some operations which can set the flag true
if(flag){ flag = false ; return true};
// some operations which can set the flag true
if(flag){ flag = false ; return true};

Я думал о том, чтобы сделать это за один разreturn flag = false;

 pedrofb30 мая 2016 г., 16:16
Интересно посмотреть, как простой вопрос о Java может вызвать такой большой интерес к stackoverflow
 Kevin Cruijssen30 мая 2016 г., 16:02
Почему бы тебе просто не использоватьif(flag){ flag = false; return true; }?
 StephaneM30 мая 2016 г., 16:03
Используйте атомное логическое значение:docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/...
 David30 мая 2016 г., 16:08
"but is assigns false first" - Конечно, это так. Почти так же, какx = 1 + 2 выполняет сложениепервый, до присваивая результатx, Как еще это будет работать?
 Gendarme30 мая 2016 г., 16:04
Это работает, но это назначаетfalse до это возвращает это.
 Murat Karagöz30 мая 2016 г., 16:03
@KevinCruijssen Да, это будет работать. Было просто любопытно, есть ли что-то для этого случая.
 Bonatti30 мая 2016 г., 16:04
Если вы вернете значение, то функция будет завершена, и никакие назначения больше не будут выполняться. Ваш вопрос либо слишком широкий, либоXY Решение по неправильной проблеме. Пожалуйста, отредактируйте свой вопрос, добавьте детали, требуемое поведение и наблюдаемое поведение.
 zapl30 мая 2016 г., 17:26

Ответы на вопрос(3)

Почему бы и нет?

Что ж, вам нужно спросить реальный ответ у разработчиков языка Java, но я думаю, что они отклонили бы такое предложение из-под контроля. Ява естьпредназначенный быть языком, который легко учить, читать и понимать. Добавление операторов, предназначенных для того, чтобы делать «умные» вещи в сжатой форме, может усложнить изучение языка и затруднить его чтение ... длясредний программист. И, если оператор действительно полезен только в крошечном числе вариантов использования, это делает аргумент читабельности и полезности еще труднее победить.

Кроме того, добавление новых функций в Java часто более технически сложно, чем вы думаете, из-за взаимодействия с другими (существующими) языковыми функциями.

И на самом деле, есть прецедент, чтобы поддержать это. Одним из предложений по пересмотру Java 7/8 в Project Coin было добавитьоператор элвиса на Яву. Предложение было рассмотрено ... и в конечном итогеуволенный.

Решение Вопроса

нет ничего встроенного, что делает то, что вы описываете. Вы сделали бы это с временной переменной:

boolean flag = true;
boolean returnValue = flag;
flag = false;
return returnValue;

Или на основе вашегов дальнейшем изменить на вопрос («Структура выглядит примерно так»), ты можешь использовать!:

boolean flag = false;
// some operations which can set the flag true
if(flag) return !(flag = false);
// some operations which can set the flag true
if(flag) return !(flag = false);
// some operations which can set the flag true
if(flag) return !(flag = false);

I действительно, действительно не будет этого делать, Это излишне тупо.

 T.J. Crowder30 мая 2016 г., 16:16
@MuratK .: Усталость. Есть так много вопросов, опубликованных с очень небольшим количеством объяснений и даже меньшим количеством размышлений, что, когда неопределенный вопрос опубликован (а первоначальный вопрос был очень расплывчатым), люди просто так устали от него, что реагируют более резко, чем, возможно, следовало бы или в реальной жизни. Стоит потратить время на рассмотрение вашего вопроса перед публикацией, спрашивая себя, принимаете ли вы информацию, которую вы не включили, пытаясь убедиться, что вы лаконичны, но не неясны и т. Д., Чтобы первоначальная версия вопроса выглядела как ваша окончательная версия.

но это может дать поведение, о котором вы спрашиваете:

AtomicBoolean flag = new AtomicBoolean(true);
System.out.println("First, I'm " + flag.get());
Boolean was = flag.getAndSet(false);
System.out.println("I was " + was + " but now I'm " +
    Flag.get());

Ваш ответ на вопрос