2013-08-08 1 views
1

Скажем, я хочу, чтобы написать один раз, ворота в который выглядит следующим образом ...Кроме foo ++, есть ли другой способ иметь переменное значение изменения после его вычисления в одном выражении?

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

Мне интересно, если есть какой-либо другой механизм, который работает таким образом (или могут быть сделаны в), так что я может потенциально перегрузить оператор (так сказать), чтобы вести себя аналогично с объектами.

У меня такое чувство, что это не выполнимо, но мне было бы очень любопытно узнать, как, если я ошибаюсь.

Sample «желание» Код ...

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

написать код, который вы * хотел * будет работать, поэтому мы понимаем, что вы хотите – Bohemian

+1

Если эта переменная является членом какого-либо класса, другой поток может изменить его. Я точно не понимаю ваш вопрос, объясните больше и дайте дополнительный контекст. –

+0

Java не позволяет перегрузке оператора ... Если вы имели в виду это буквально. – initramfs

ответ

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

Хм ... Интересно, так ли это - и ++ работает, под капотом. Хорошо ... Я соглашусь, что это правильный ответ. :) –

+0

Не уверен насчет '++' и '--', но я считаю, что' java.util.Map # put (key, val) 'конечно работает таким образом. – anubhava

3

Это не оператор, но это легко сделать, изменив функцию в MagicObject.

class MagicObject{ 
    public String oldVal = "apple" 
    public String magicPostEvalString(String newVal){ 
     String temp = oldVal; 
     oldVal = newVal; 
     return temp; 
    } 
} 
Смежные вопросы