假设我想写一个看起来像这样的一次门...
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 ++正在做的事情......它会评估然后更改值.
而不是这个:
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)方法中完成.