将类变量作为私有方法的参数传递而不是简单地引用它们是否有任何优点/缺点?随着我的课程变得越来越长,我担心未来的编码员需要向上滚动到类的顶部来弄清楚“foo”是什么,所以当考虑调用该方法时我正在考虑将它们作为参数传递,但我不是确定这是否会导致其他问题,我不会考虑。
总之;是这样的:
public class Foo {
private int number = 0;
public Foo(int startingNumber) {
this.number = startingNumber;
}
public int biggerNumber() {
return embiggenIt(number);
}
// ... Many lines of code ...
private int embiggenIt(int aNumber) {
return aNumber++;
}
}
比这更好或更差:
public class Foo {
private int number = 0;
public Foo(int startingNumber) {
this.number = startingNumber;
}
public int biggerNumber() {
return embiggenIt();
}
// ... Many lines of code ...
private int embiggenIt() {
return this.number++;
}
}
......如果是的话,为什么?
修改
好的,显然我应该在这里指出我不关心改变类变量,我不确定为什么每个人都跳到那个结论;我没有意识到我的例子是那么可怕(尽管我确实把它拼凑在了一起)。在示例中,我关心的是运行方法后的返回值(想想函数式编程)。
也许这是我所说的更好的例子:
public class Foo {
private static final int number = 0;
public Foo() {
}
public int biggerNumber() {
return embiggenIt(number);
}
// ... Many lines of code ...
private int embiggenIt(int aNumber) {
return aNumber +1;
}
}
v.s。
public class Foo {
private static final int number = 0;
public Foo() {
}
public int biggerNumber() {
return embiggenIt();
}
// ... Many lines of code ...
private int embiggenIt() {
return this.number +1;
}
}
我要强调的是变量不必是常数,但我补充说,只是为了清楚地表明我对改变变量不感兴趣(我理解通过引用传递vs传递值,谢谢)。 / p>
既然我们已经更清楚了,那么这两种方法都有所作为吗?你宁愿读什么?哪个会让你受到Jr.程序员的指责?
答案 0 :(得分:0)
在第一种情况下,您正在经过值。所以类的成员变量永远不会被修改。在第二种情况下,您将引用类变量本身。
答案 1 :(得分:0)
我会说它更糟糕,因为它只会让你头疼并跟踪范围。例如,在您的第一个代码中,类变量number
的值不会增加,因为您只增加了指向与aNumber
不同的变量的本地字段aNumber
的值。
答案 2 :(得分:0)
首先,您的代码示例将产生不同的结果 - 第一个不执行任何操作,而第二个实际增加number
。两者都返回变量的旧值(即没有添加1),因为你使用了后递减运算符x++
(而不是++x
)。
如果使用自解释名称,即使在大类文件中使用字段也没有问题。
第三,如果你想为它分配一个值,通常不可能省略使用该字段。
答案 3 :(得分:0)
在java中,本机类型(如int,double,...)按值传递
并且任何类对象都通过引用传递。
所以在你的代码中你可以使用Integer类而不是int
答案 4 :(得分:0)
所以我终于找到了问题的答案。似乎其他人在不理解问题的情况下阅读了我的代码,但我自己偶然发现了正确的答案。
将变量传递给方法比简单地引用类变量更可取,因为它允许我们在测试时执行依赖注入。明显的例外是类常量。