1

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

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++ 正在做的事情......它评估然后更改值。

4

2 回答 2

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)在方法上也做了类似的事情。

于 2013-08-08T05:29:48.127 回答
3

它不是一个运算符,但通过修改 MagicObject 中的函数很容易做到这一点。

class MagicObject{
    public String oldVal = "apple"
    public String magicPostEvalString(String newVal){
        String temp = oldVal;
        oldVal = newVal;
        return temp;
    }
}
于 2013-08-08T05:30:41.230 回答