成员函数返回/获取实例变量

时间:2011-11-10 23:47:53

标签: java oop

让我们说我正在实施一个增加两个数字的计算器。

由于我们想要跟踪到目前为止的部分结果,我们需要维护两个成员变量,oldNum用于部分结果,newNum用于当前输入的数字。

现在在某些时候会有一个add方法,它将newNum添加到oldNum并将结果存储在oldNum中。

由于newNum和oldNum都是成员字段,因此我们不需要在add方法中传递或返回任何内容。

另一方面,如果你阅读了源代码并且遇到了一个没有任何参数的void方法,那么这可能看起来很奇怪。

所以我的问题是,是否有时候你想将成员字段传递给成员函数。

看起来像是:

class Calc {

   int oldNum, newNum;

   public void add1() {
    oldNum = oldNum + newNum;

  }
public int add2(int n1, int n2) {
        return n1 + n2;
 }

3 个答案:

答案 0 :(得分:2)

在这里返回void没有什么奇怪的,你正在改变对象的内部状态。如果要提供输出,可以返回this,无效或添加结果的副本。

您编写的add2(...)方法不使用任何成员变量,这些变量应该作为静态方法实现,不需要实例化对象。但是,我认为你不需要这个。

答案 1 :(得分:1)

为什么不选择流畅的界面并让你的add方法返回?

public class Calculator {
  private int runningTotal = 0;
  public Calculator add(int value) {
    runningTotal += value;
    return this;
  }
}

然后您的调用代码可以非常优雅地编写(IMO)。

<强>更新

这样您的调用代码可以执行以下操作:

Calculator calc = new Calculator();
int result = calc.add(x).subtract(y).divide(z).result();

答案 2 :(得分:0)

我认为你在这里所做的主要是你希望计算器如何表现的问题。听起来你正在采用“基于堆栈”的方法,一个人可以输入这样的命令:

12 11 +

如果是这种情况,你的Calc类应该有类似的方法:

void pushNumber(int number);
void add();

对于使用它的典型开发人员来说,这不会让人感到困惑。