Почему невозможно увеличить, а затем передать значение в методе set с помощью ++
Вопрос
У меня есть строка кода, которая работает следующим образом:
mrq.setId((mrq.getId()+1));
Но когда я попытался написать это вот так,
mrq.setId((mrq.getId()++));
Это не работает, ошибка в том, Invalid argument ot the operation ++/--
Какова техническая причина этого?
Решение
Оператору приращения требуется поле или переменная.Оценка getId()
не приводит к появлению поля id;он возвращает копию значения getId()
возвращает (под «копией» я подразумеваю буквальную копию для примитивных типов и новую ссылку для ссылочных типов). getId()
может быть реализован как return id;
внутри страны, но ты не вернешься на поле id
, только копия его значения.
Ближайшим эквивалентом будет int i = getId(); setId( getId() + 1 ); return i;
, но ты многого просишь, чтобы позволить getId()++
в качестве синтаксического сахара для такого выражения.
Другие советы
x++
существенно эквивалентен x = x + 1
, который не имеет смысла в вашем случае:
mrq.getId() = mrq.getId() + 1
. ++
Оператор используется для увеличения значения переменной на 1.так a++
рассматривается как a=a+1
.Это означает, что присваивание будет выполняться в операнде, в котором он используется.
Когда ты пишешь mrq.getId()++
он не предоставляет вам переменную операнда, которую он может увеличивать, и, следовательно, это не работает.