可能的内联“预分配”操作?

时间:2011-10-26 01:59:58

标签: java variables variable-assignment

看到我对计算机科学术语的理解缺乏,如果错误地命名为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)
}

虽然一个好的设计不需要像这样,你可能有一个方法规范要求它重置一个计数器并返回它的值。

3 个答案:

答案 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相对较新。