传递变量与访问类字段

时间:2013-03-11 22:44:40

标签: java oop

我对程序风格有疑问。在一个类中,最好将变量传递给方法还是访问方法中的字段?

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)
   }           
}

4 个答案:

答案 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静态。