除了foo ++之外,在一个语句中进行求值后,还有其他方法可以获得变量值吗?

Gen*_* S. 1 java

假设我想写一个看起来像这样的一次门...

int closing = 1;
if(closing-- > 0){
   //this will only work once
}
Run Code Online (Sandbox Code Playgroud)

我很好奇是否有任何其他机制以这种方式工作(或者可以使用),这样我可能会使运算符重载(可以这么说)以使其与对象的行为类似.

我有一种感觉这是不可行的,但如果我错了,我会非常好奇地知道如何.

示例"愿望"代码......

class MagicObject{
   public String oldVal = "apple"
   public String magicPostEvalString(String newVal){
      return oldVal;
      oldVal = newVal;
   }
}

MagicObject mo = new MagicObject();

if(mo.magicPostEval("orange").equals("apple"))
//this will also only happen once
Run Code Online (Sandbox Code Playgroud)

请注意,在我的magicPostEvalString中,在返回后设置该值,以便在修改之前返回旧值.

从本质上讲,这就是foo ++正在做的事情......它会评估然后更改值.

anu*_*ava 7

而不是这个:

public String magicPostEvalString(String newVal){
      return oldVal;
      oldVal = newVal;
}
Run Code Online (Sandbox Code Playgroud)

你可以这样做来覆盖oldval并返回oldval:

public String magicPostEvalString(String newVal){
      String tmp = oldval;
      oldVal = newVal;
      return tmp;
}
Run Code Online (Sandbox Code Playgroud)

类似的东西也在java.util.Map#put(key, val)方法中完成.