让我们说我正在实施一个增加两个数字的计算器。
由于我们想要跟踪到目前为止的部分结果,我们需要维护两个成员变量,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;
}
答案 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();
对于使用它的典型开发人员来说,这不会让人感到困惑。