内联或在构造函数中初始化字段
问题描述:
从文体上讲,在构造函数中或在声明字段的位置初始化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>();
}
我也通常青睐,因为它似乎更清楚的是前者。但是,后者显然会导致代码更紧凑。
答
我的经验法则是:如果
-
把它在声明的时候......它可以(即如果它不依赖于构造函数的参数,例如)
- ...它的值不需要任何形式的计算
- ...无论使用哪个构造函数,值都是相同的。
否则,把它放在构造函数中。
通常我严格遵循官方的Java编码约定。在这种特殊情况下,约定没有提及任何事情,所以由每个程序员决定。然而,你选择哪一个,你可能想要符合你的选择。
答
如果你有多个构造函数,那么初始化(可能)需要重复,如果它没有在定义点上初始化。
[最佳实践:初始化构造函数或声明中的类字段?]的可能的重复?(http://stackoverflow.com/questions/24551/best-practice-initialize-class-fields-in-constructor-or-at - 声明) – 2012-03-21 11:23:30
前者对我来说很好,因为只有在创建对象时才会初始化您的列表。 – sgowd 2012-03-21 11:23:44
虽然在第二种情况下也是如此。 – aioobe 2012-03-21 11:26:02