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

时间:2013-08-08 05:13:32

标签: java

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

int closing = 1;
if(closing-- > 0){
   //this will only work once
}

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

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

示例“愿望”代码......

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

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

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

2 个答案:

答案 0 :(得分:7)

而不是:

public String magicPostEvalString(String newVal){
      return oldVal;
      oldVal = newVal;
}

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

public String magicPostEvalString(String newVal){
      String tmp = oldval;
      oldVal = newVal;
      return tmp;
}

java.util.Map#put(key, val)方法中也做了类似的事情。

答案 1 :(得分:3)

它不是运算符,但通过修改MagicObject中的函数很容易实现。

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