4

这是一个设计问题,我敢肯定有人会这样做。但是在您看来,在类中分配变量还是在构造函数中分配变量更好?例如(无论语法或语言,这只是为了解释):

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

或者

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

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

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

4

5 回答 5

4

打算 :

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


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

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

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

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

于 2010-02-03T18:06:44.013 回答
2

内联(第一个选项):

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

    {
        var1 = 5;
        varTime = now();
    }
    
于 2010-02-03T18:04:50.893 回答
1

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

于 2010-02-03T18:07:39.707 回答
1

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

于 2010-02-03T18:38:52.917 回答
0

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

于 2011-12-19T18:18:28.337 回答