2012-03-21 90 views
0

從文體上講,在構造函數中或在聲明字段的位置初始化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>(); 
} 

我也通常青睞,因爲它似乎更清楚的是前者。但是,後者顯然會導致代碼更緊湊。

+0

[最佳實踐:初始化構造函數或聲明中的類字段?]的可能的重複?(http://stackoverflow.com/questions/24551/best-practice-initialize-class-fields-in-constructor-or-at - 聲明) – 2012-03-21 11:23:30

+0

前者對我來說很好,因爲只有在創建對象時纔會初始化您的列表。 – sgowd 2012-03-21 11:23:44

+0

雖然在第二種情況下也是如此。 – aioobe 2012-03-21 11:26:02

回答

4

我的經驗法則是:如果

  • 把它在聲明的時候......它可以(即如果它不依賴於構造函數的參數,例如)

  • ...它的值不需要任何形式的計算
  • ...無論使用哪個構造函數,值都是相同的。

否則,把它放在構造函數中。

通常我嚴格遵循官方的Java編碼約定。在這種特殊情況下,約定沒有提及任何事情,所以由每個程序員決定。然而,你選擇哪一個,你可能想要符合你的選擇。

1

如果你有多個構造函數,那麼初始化(可能)需要重複,如果它沒有在定義點上初始化。