在内联或构造函数内初始化字段

时间:2012-03-21 11:20:59

标签: java

在风格上,最好在构造函数中或在声明字段的位置初始化Java字段?例如:

public class Foo {
  private final List<String> l;

  public Foo() {
    this.l = new LinkedList<String>();
  }
}

......或

public class Foo {
  private final List<String> l = new LinkedList<String>();
}

我通常偏爱前者,因为它看起来更清晰。但是,后者显然会产生更紧凑的代码。

2 个答案:

答案 0 :(得分:4)

我的经验法则是:

如果

,请将其置于声明的位置
  • ... 可以(例如,如果它不依赖于构造函数参数)
  • ...它的值不需要任何形式的计算
  • ...无论使用哪种构造函数,值都相同。

否则,将它放在构造函数中。

通常我严格遵循官方Java编码约定。在这种特殊情况下,约定并没有说明任何内容,因此需要由每个程序员来决定。然而,无论如何,您可能希望与您的选择保持一致。

答案 1 :(得分:1)

如果你有多个构造函数,那么如果在初始化时没有初始化,则需要重复初始化(可能)。