3

我有一个关于程序风格的问题。在类中,将变量传递给方法还是访问方法内的字段更好?

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

4 回答 4

1

this无论如何,当您调用成员函数时,您已经在传递对象(as )。您也不必从显式指定参数中获得任何好处,除非您需要能够使用具有除this.num.

短版:使用后者,除非您需要calculateX(some_whole_other_number).

于 2013-03-11T22:49:55.433 回答
1

这些方法可能看起来有点像你,因为它们给你相同的结果,但它们实际上彼此非常不同。

例如,假设您的NumberText方法看起来像

public NumberTest (int num){
   this.num = num;


   calculateX(num * 2);
   calculateY();
}

calculateX实际上不会占用该领域,但它可以采取完全不同的方式。

一般的经验法则是

num如果传递除to以外的其他内容有意义,则calculateX您可能应该传递它。否则,不要

另外,如果你这样做

private void calculateX(int num){
   System.out.println (num);
}

将参数名称更改为num

于 2013-03-11T22:50:08.833 回答
1

我会和这里的其他人不同......

在所有合理的地方,我喜欢传递论点。这非常轻微地将方法与类实现分离,并使单元测试更容易。例如,有时this.num由于其他限制,设置为 94404 是一个非常复杂的过程。

例如,这是一个邮政编码,但您的业务逻辑要求它必须与州和国家/地区字段匹配。或者,在实践中,该字段是从数据库、网站等中读取的……

如果您传递参数,您的单元测试可以快捷方式并只传递值。而且,万一您将来可能遇到不想使用类字段中的内容的特殊情况,您可以这样做。

现在,如果您使用 27 个类字段,您显然不想传入 27 个参数。但是,IMO,如果是 1 或 2,我喜欢将它们传递进去。

接受后添加的小注释:

传入 arg 和使用字段之间还有另一个可能的区别。在多线程环境中,使用传入的参数可能比从字段中读取更安全。该字段可能会在函数中间发生更改,而传入的参数(取决于类型和用法)不太可能更改。在此示例中,传入的int num值永远不会意外更改,但this.num可能会更改。

于 2013-03-11T23:00:31.630 回答
0

num 是 NumberTest 的某种状态吗?以后需要吗?如果是这样,请将其设为字段。

NumberTest 是否只为许多数字提供函数 calculateX?如果是这样,请将 calculateX 设为静态。

于 2013-03-11T22:53:21.923 回答