看到我对计算机科学术语的理解缺乏,如果错误地命名为CS概念,请耐心等待我并纠正我。
有没有办法做一些我会在变量上调用“内联后赋值”的东西?它实质上是“内联预分配”的相反流程。例如:
// some random number
int currentNumber = 0;
// e.g. of inline pre-assignment (assigns 5 to var before entering function)
doSomethingOnNumber(currentNumber = 5);
// e.g. of envisioned inline "post-assignment"
// (assigns 5 to var after entering function)
doSomethingOnNumber(5 = currentNumber);
// And yes, I know I could just do something like:
doSomethingOnNumber(currentNumber);
currentNumber = 5;
// But that is rather boring ;D
这可能是一个疯狂的问题(看到等号只是:将右手数据分配给左手变量),但也许有一些Java框架可以预先形成?
这将是有用的主要方式是:
private int myNum = 0;
public int resetNum (int newNum) {
return myNum;
myNum = newNum; // (this never happens because of the return)
}
虽然一个好的设计不需要像这样,你可能有一个方法规范要求它重置一个计数器并返回它的值。
答案 0 :(得分:4)
最接近的是使用pre(in | de)crement(++
| --
)运算符。
int currentNumber = 0;
// pre-increment (function receives 1)
doSomethingOnNumber(++currentNumber);
// vs
currentNumber = 0;
// post-increment (function receives 0)
doSomethingOnNumber(currentNumber++);
一般来说,“无聊”代码比“聪明”代码更令人满意。无聊的代码往往更清晰,更简单,更易于维护。
答案 1 :(得分:1)
让方法返回所需的值:
currentNumber = doSomethingOnNumber(currentNumber);
如果调用站点知道所需的值,请将其传递给方法:
currentNumber = doSomethingOnNumber(currentNumber, 5);
答案 2 :(得分:0)
我提出的针对上述情况的解决方案是:
private int myNum = 0;
public int resetNum (int newNum) {
try {
return myNum;
} finally {
myNum = newNum; //this happens despite return because of the finally clause
}
}
我不确定这是否真的有效,因为我还没有机会对它进行测试,而且我对java相对较新。