在类本身或类的构造函数中赋值变量更好吗?

时间:2010-02-03 18:03:18

标签: oop instantiation variable-assignment

这是一种设计问题,我确信有人会同时做到这一点。但是在您看来,在类或构造函数中分配变量是否更好?例如(无论语法或语言如何,这只是为了解释):

public class Example
{
   private final int TIME_STAMP = Now();
   private int num = 2;
}

OR

public class Example
{
   private readonly int TIME_STAMP;
   private int num;

   public Example()
   {
      TIME_STAMP = Now();
      num = 2;
   }
}

请忽略不同语言和语法的混合......哪个更好,为什么?

5 个答案:

答案 0 :(得分:4)

倾向于:

  • 在类本身中设置默认,常量
  • 取决于构造函数中其他内容(如当前时间)的值。


即,我倾向于使用像这样的东西(合并你的两个例子)

public class Example
{
   private readonly int TIME_STAMP;
   private int num = 2;

   public Example()
   {
      TIME_STAMP = Now();
   }
}

但我首选的语言是PHP,它不允许我在类声明本身中设置非常量值,所以我的方式可能有点偏颇。

答案 1 :(得分:2)

内联(第一个选项):

  • 更具可读性
  • 您不必在每个构造函数中复制它
  • 如果您的语言中有此类内容,则可以使用初始化程序块。它们看起来像构造函数,但不需要多次定义。在Java中,它们看起来像这样:

    {
        var1 = 5;
        varTime = now();
    }
    

答案 2 :(得分:1)

这里的主要思想是在构造函数中为类添加任何启动或初始化代码。与此相反,逻辑上,您在析构函数中添加了任何清理代码。

答案 3 :(得分:1)

从可测试性的角度来看,这两种方法都存在问题。除了常量之外,你应该有一个接受这些作为参数的构造函数,或者一个允许你设置支持字段的属性。
通常,我会创建一个“完整”构造函数,它可以让您完全控制该类,以及一个空/默认构造函数,它会调用指定默认参数的另一个构造函数。这样,一切都在一个地方,我不必去寻找支持领域来弄清楚施工时发生了什么。

答案 4 :(得分:0)

这取决于您使用的是哪种语言。例如,在PHP中,只能在类中立即定义常量。但是,如果您要进行跨语言兼容性,那么最好为构造函数中的所有类变量赋值。