我对程序风格有疑问。在一个类中,最好将变量传递给方法还是访问方法中的字段?
public class NumberTest{
private int num;
public NumberTest (int num){
this.num = num;
calculateX(num);
calculateY();
}
private void calculateX(int num){
System.out.println (num);
}
private void calculateY(){
System.out.println(num)
}
}
答案 0 :(得分:1)
无论如何,当你调用成员函数时,你已经传递了对象(如this
)。除非你需要能够使用this.num
以外的值使用相同的函数,否则你不必从显式指定参数中获得任何东西。
简短版本:使用后者,除非您需要calculateX(some_whole_other_number)
。
答案 1 :(得分:1)
这些方法可能看起来有点类似于你,因为它们会给你相同的结果,但实际上它们彼此非常不同。
例如,假设您的NumberText
方法看起来像
public NumberTest (int num){
this.num = num;
calculateX(num * 2);
calculateY();
}
calculateX
实际上不会占用该字段,但它可能需要完全不同的东西。
一般的经验法则是
如果将num
以外的其他内容传递给calculateX
,则可能应该将其传入。否则,请不要
另外,如果你这样做
private void calculateX(int num){
System.out.println (num);
}
将参数名称更改为num
答案 2 :(得分:1)
我在这里与其他人不同......
它完全是合理的,我喜欢传递参数。这非常轻微地将方法与类实现分离,并使单元测试更容易。例如,由于其他约束,有时将this.num
设置为94404是一个非常复杂的过程。
e.g。这是一个邮政编码,但您的业务逻辑要求它必须与州和国家/地区字段匹配。或者,在实践中,该字段是从数据库,网站等中读取的......
如果传递参数,单元测试可以快捷方式并传入值。而且,如果您不想使用类字段中的内容,您可能会遇到未来的特殊情况,您可以这样做。
现在,如果你使用27个类字段,你显然不想传入27个参数。但是,IMO,如果它是1或2,我喜欢传递它们。
在接受后添加了Minor Noted:
传递arg和使用字段之间还有另一个可能的区别。在多线程环境中,使用传入的参数可能比从字段读取更安全。该字段可能在函数中间被更改,而传入的参数(取决于类型和用法)不太可能更改。在此示例中,传入的int num
将永远不会意外更改,但this.num
可能会发生变化。
答案 3 :(得分:0)
num是NumberTest的某种状态吗?你以后需要吗?如果是这样,请将其设为字段。
NumberTest是否只为许多nums提供函数calculateX?如果是这样使computeX静态。