【问题标题】:Is there a post-assignment operator for a boolean?布尔值是否有赋值后运算符?
【发布时间】:2016-09-28 09:30:40
【问题描述】:

你好,在 Java 中可以做到这样的事情吗?

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

澄清一下。上面的工作,但首先分配 false 。我想要实现的是尽快返回标志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;一口气完成它

【问题讨论】:

  • 你为什么不直接使用if(flag){ flag = false; return true; }
  • 如果返回值,则函数结束,不能再进行赋值。您的问题要么太宽泛,要么XY 解决了错误的问题。请编辑您的问题,添加详细信息、想要的行为和看到的行为。
  • "but is assigns false first" - 当然可以。与x = 1 + 2 执行加法first 的方式非常相似,before 将结果分配给x。它还能如何工作?

标签: java boolean boolean-expression


【解决方案1】:

不,没有任何内置功能可以满足您的描述。你可以用一个临时变量来做:

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);

真的,真的不会这样做。它是不必要的钝。

【讨论】:

  • @MuratK.:疲劳。发布了很多问题,几乎没有解释,甚至更少思考,以至于当发布一个模糊的问题(并且最初的问题非常模糊)时,人们对此感到厌倦,他们的反应比他们应该或应该的更严厉在真实生活中。在发布之前花时间检查您的问题是非常值得的,问自己是否假设您未包含的信息,尝试确保您简洁但不不清楚等,以便问题的初始版本看起来更像你的最终版本。
【解决方案2】:

看看 java.util.concurrent.AtomicBoolean。我没有尝试过,但它可能会给出您所询问的行为:

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());

【讨论】:

    【解决方案3】:

    不,没有办法做到这一点。

    为什么不呢?

    好吧,您需要向 Java 语言设计人员询问真正的答案,但我想他们会立即驳回这样的提议。 Java 被设计为一种易于学习、阅读和理解的语言。添加旨在以简洁方式执行“聪明”事情的运算符可能会使语言更难学习,更难阅读......对于普通程序员来说。而且,如果运算符只在少数用例中真正有用,那么可读性与实用性的争论就更难取胜了。

    此外,由于与其他(现有)语言功能的交互,向 Java 添加新功能在技术上通常比您想象的更困难。

    实际上,有先例支持这一点。 Project Coin 中的 Java 7 / 8 修订提案之一是向 Java 添加elvis operator。该提案被考虑...并最终dismissed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-20
      • 2013-06-06
      • 2013-07-07
      • 2023-03-08
      • 2013-02-27
      • 1970-01-01
      • 2016-04-30
      • 2021-08-28
      相关资源
      最近更新 更多