このように機能するコード行があります。
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()++
、インクリメントできるオペランド変数を提供しないため、これは機能しません。